Proiect Ledger Live Monorepo: Partea 2 - Instrumentele (Fă-l să strălucească) | Registrul mare

Proiect Ledger Live Monorepo: Partea 2 – Instrumentele (Fă-l să strălucească) | Registrul mare

Nodul sursă: 2985172

A doua intrare a seriei de postări de blog „Ledger Live Monorepo Project”, unde un dezvoltator Ledger ne spune povestea migrației uriașe a bazei de cod Ledger Live într-un depozit mono. Dacă ai ratat partea 1, vezi-o aici:

După ce am stabilit că o arhitectură monorepo era o soluție viabilă, am început apoi să analizăm instrumentele disponibile pentru a ne pune în aplicare planul.

Gestionarea mai multor proiecte

În echipa Ledger Live navigăm în ecosistemul JavaScript și, din fericire pentru noi, știam deja câteva modalități de a gestiona mai multe proiecte cu managerul nostru de pachete. Unele dintre aceste soluții posibile includ:

  • NPM (are suport pentru spațiile de lucru, dar alternative mai bune),
  • Fire 1 (devenind prea vechi, alternative mai bune și mai eficiente),
  • Fire ≥ 2 (idee interesantă, dar plug n play nu este bine acceptat peste tot, mai ales cu React Native),
  • PNPM (legături simbolice, construite având în vedere spațiile de lucru, eficiente pe disc).

După ce ne-am uitat la toate acestea, am decis să mergem cu PNPM pentru:

  • eficiența discului (folosește un virtual stoca și legături simbolice, deci pachetele sunt descărcate o singură dată, apoi sunt legate simbolic la node_modules din magazinul virtual),
  • viteza (deoarece pachetele sunt stocate în cache, instalările ulterioare sunt mult mai rapide),
  • construit în suport pentru spațiile de lucru/arhitectura monorepo (aliasuri, orchestrare etc...).

Pe hârtie PNPM este o bijuterie absolută, dar linkurile simbolice erau puțin ciudate pentru a fi configurate corect (din nou, în special cu React Native).

Ok, deci alegerea noastră a fost făcută, am merge cu PNPM.

Orchestrarea scenariului

Chiar dacă PNPM adaugă din ce în ce mai multă orchestrare caracteristicilor sale, încă nu acoperă tot ce ne-am dorit să facem, cum ar fi:

  • construcții secvențiale,
  • stocarea în cache.

Pentru acestea, am găsit doi concurenți interesanți la care trebuia să aruncăm o privire:

  • NX (de către echipa unghiulară),
  • Turborepo (care tocmai a anunțat versiunea 1.0.0 când am început să lucrăm la el și acum lucrăm cu echipa Vercel).

Am făcut o dovadă de concept pentru ambele.

NX avea mult mai multe funcții, generatoare, automatizări, grafice de dependență grozave etc... dar a adăugat o mulțime de cheltuieli generale și, deoarece este destul de obișnuit, ar trebui să le respectăm convențiile.

Turborepo pe de altă parte, este destul de de bază în ceea ce privește caracteristicile. Cu toate acestea, este o soluție plug and play convenabilă pe care am putea-o schimba foarte repede dacă este nevoie.

Chiar dacă Turborepo avea mai puține caracteristici decât NX, a făcut cele 2 lucruri pe care le căutam:

  • Orchestrarea build-urilor respectând arborele de dependență (și build-urile concurente),
  • Memorarea în cache (build-urile sunt memorate în cache și „reluate” dacă codul lor nu s-a schimbat).

Asta, plus intrarea/abandonarea ușoară, ne-a făcut să alegem noul puști de la bloc, TurboRepo.

Versionare

Am căutat și mai multe soluții, dar în cele din urmă am decis să le folosim https://github.com/changesets/changesets deoarece a fost un instrument recomandat de TurboRepo și, după un pic de citire a documentației, părea să corespundă nevoilor noastre.

Dezvoltatorii ar trebui să fie puțin mai riguroși în fluxul lor de dezvoltare și să ofere changesets (fișier care descrie ce bibliotecă se modifică codul lor, severitatea urmând a sever convenție și o descriere a modificării). Aceste changesets sunt apoi folosite pentru a elimina automat versiunea pachetelor respectând severitățile date, precum și pentru a automatiza generarea de de schimbări. În plus, instrumentele permit pre release modul, 🍒 pe 🍰.

Ce urmeaza?

După ce s-a hotărât asupra instrumentelor, era timpul să începem lucrul. În următorul articol de blog, vom vorbi despre sistemul de construcție și toate dev-ops / automatizare / integrare continuă în contextul unui depozit mono.


Valentin DE ALMEIDA
Experiență de dezvoltator și tehnologie de bază – Ledger Live

Timestamp-ul:

Mai mult de la carte mare