Seconda voce della serie di post del blog "Ledger Live Monorepo Project", in cui uno sviluppatore Ledger ci racconta la storia dell'enorme migrazione della base di codice Ledger Live in un repository mono. Se ti sei perso la prima parte, dai un'occhiata qui:
Dopo aver stabilito che un'architettura monorepo era una soluzione praticabile, abbiamo iniziato a esaminare gli strumenti disponibili per mettere in atto il nostro piano.
Gestire più progetti
Nel team di Ledger Live navighiamo nell'ecosistema JavaScript e, fortunatamente per noi, conoscevamo già diversi modi per gestire più progetti con il nostro gestore di pacchetti. Alcune di queste possibili soluzioni includono:
- NPM (ha supporto per gli spazi di lavoro ma alternative migliori),
- Filato 1 (diventando troppo vecchi, alternative migliori e più efficienti),
- Filato ≥ 2 (idea interessante, ma plug n play non ben supportato ovunque, specialmente con React Native),
- PNPM (link simbolici, creati pensando agli spazi di lavoro, efficienti sul disco).
Dopo aver esaminato tutto ciò, abbiamo deciso di procedere PNPM per:
- l'efficienza del disco (usa un virtual Tornare al suo account ed collegamenti simbolici, quindi i pacchetti vengono scaricati solo una volta e poi collegati simbolicamente ai tuoi node_modules dal negozio virtuale),
- la velocità (poiché i pacchetti vengono memorizzati nella cache, le installazioni successive sono molto più veloci),
- supporto integrato per spazi di lavoro/architettura monorepo (alias, orchestrazione ecc…).
Sulla carta PNPM è un vero gioiello, ma i collegamenti simbolici erano un po' strani da impostare correttamente (di nuovo, specialmente con React Native).
Ok, quindi la nostra scelta è stata fatta, vorremmo andare avanti PNPM.
Orchestrazione degli script
Sebbene PNPM aggiunge sempre più orchestrazione alle sue funzionalità, ma non copre ancora tutto ciò che volevamo fare, come ad esempio:
- build sequenziali,
- memorizzazione nella cache.
Per questi, abbiamo trovato due contendenti interessanti a cui dovevamo dare un'occhiata:
- NX (dal team angolare),
- Turborepo (che ha appena annunciato la versione 1.0.0 quando abbiamo iniziato a lavorarci, e ora lavora con il team Vercel).
Abbiamo fatto una prova di concetto su entrambi.
NX aveva molte più funzionalità, generatori, automazione, ottimi grafici delle dipendenze ecc... ma aggiungeva molto sovraccarico e, poiché è piuttosto supponente, avremmo dovuto seguire le loro convenzioni.
Turborepo d'altra parte, è piuttosto semplice dal punto di vista delle funzionalità. Eppure è una comoda soluzione plug and play che potremmo cambiare molto rapidamente se mai se ne presentasse la necessità.
Sebbene Turborepo aveva meno funzionalità di NX, ha fatto le 2 cose che stavamo cercando:
- Orchestrazione di build rispettando l'albero delle dipendenze (e build simultanee),
- Caching (le build vengono memorizzate nella cache e "riprodotte" se il loro codice non è cambiato).
Questo, oltre al facile accesso/abbandono, ci ha fatto scegliere il nuovo ragazzo del quartiere, TurboRepo.
versioning
Abbiamo esaminato anche diverse soluzioni, ma alla fine abbiamo deciso di utilizzarle https://github.com/changesets/changesets poiché era uno strumento consigliato da TurboRepo e, dopo un po' di lettura della documentazione, sembrava soddisfare le nostre esigenze.
Gli sviluppatori dovrebbero essere un po' più rigorosi nel flusso di sviluppo e nella fornitura changesets
(file che descrive quale libreria cambia il loro codice, la gravità seguente sempre convenzione e una descrizione della modifica). Questi changesets
vengono poi utilizzati per eseguire il bumping automatico della versione dei pacchetti rispettando la gravità specificata, nonché per automatizzare la generazione dei file changelog. Inoltre, gli strumenti lo consentono pre release
modalità, il 🍒 sul 🍰.
Qual è il prossimo?
Dopo aver deciso gli strumenti, era ora di iniziare a lavorare. Nel prossimo articolo del blog parleremo del sistema di build e di tutte le operazioni di sviluppo/automazione/integrazione continua nel contesto di un repository mono.
Valentin DE ALMEIDA
Esperienza dello sviluppatore e tecnologia di base: Ledger Live
- Distribuzione di contenuti basati su SEO e PR. Ricevi amplificazione oggi.
- PlatoData.Network Generativo verticale Ai. Potenzia te stesso. Accedi qui.
- PlatoAiStream. Intelligenza Web3. Conoscenza amplificata. Accedi qui.
- PlatoneESG. Carbonio, Tecnologia pulita, Energia, Ambiente, Solare, Gestione dei rifiuti. Accedi qui.
- Platone Salute. Intelligence sulle biotecnologie e sulle sperimentazioni cliniche. Accedi qui.
- Fonte: https://www.ledger.com/blog/ledger-live-monorepo-project-part-2-the-tools-make-it-shine
- :ha
- :È
- :non
- :Dove
- 1
- a
- WRI
- Assoluta
- aggiunto
- Aggiunge
- Dopo shavasana, sedersi in silenzio; saluti;
- ancora
- Tutti
- consente
- già
- alternative
- an
- ed
- Angular
- ha annunciato
- architettura
- SONO
- articolo
- AS
- At
- automatizzare
- automaticamente
- Automazione
- disponibile
- basic
- BE
- diventando
- Meglio
- Po
- Bloccare
- Blog
- Post di Blog
- entrambi
- costruire
- costruisce
- costruito
- ma
- by
- il cambiamento
- cambiato
- Modifiche
- dai un'occhiata
- scegliere
- Scegli
- codice
- codebase
- viene
- ottemperare
- concetto
- concorrente
- contesto
- continuo
- Comodo
- Convenzione
- convenzioni
- Nucleo
- correttamente
- potuto
- coprire
- deciso
- Decidere
- Dipendenza
- descrivendo
- descrizione
- Dev
- Costruttori
- DID
- do
- documentazione
- non
- Cadere
- facile
- ecosistema
- efficienza
- efficiente
- iscrizione
- particolarmente
- stabilire
- Etere (ETH)
- EVER
- qualunque cosa
- ovunque
- esperienza
- più veloce
- caratteristica
- Caratteristiche
- Compila il
- flusso
- seguire
- i seguenti
- Nel
- per fortuna
- essere trovato
- da
- gemma
- ELETTRICA
- Generatori
- dato
- Go
- grafici
- grande
- ha avuto
- cura
- maniglia
- Avere
- qui
- HTTPS
- Enorme
- idea
- if
- in
- includere
- integrazione
- interessante
- ai miglioramenti
- IT
- SUO
- JavaScript
- ad appena
- Ragazzo
- Ledger
- Ledger Live
- meno
- Biblioteca
- vivere
- Guarda
- guardò
- cerca
- lotto
- fatto
- make
- direttore
- max-width
- migrazione
- mente
- perse
- Moda
- Scopri di più
- più efficiente
- molti
- multiplo
- nativo
- Navigare
- Bisogno
- di applicazione
- esigenze
- New
- GENERAZIONE
- adesso
- of
- Vecchio
- on
- una volta
- ONE
- esclusivamente
- Supponente
- orchestrazione
- Altro
- nostro
- su
- pacchetto
- Packages
- Carta
- parte
- posto
- piano
- Platone
- Platone Data Intelligence
- PlatoneDati
- Giocare
- spina
- plug and play
- più
- possibile
- Post
- piuttosto
- progetto
- progetti
- prova
- prova del concetto
- fornire
- metti
- rapidamente
- Reagire
- Reagisci nativo
- Lettura
- raccomandato
- deposito
- rispetto
- rigoroso
- sembrava
- Serie
- flessibile.
- alcuni
- gravità
- splendere
- da
- So
- soluzione
- Soluzioni
- alcuni
- appositamente
- velocità
- inizia a
- iniziato
- Ancora
- Tornare al suo account
- Storia
- successivo
- tale
- supporto
- supportato
- sistema
- Fai
- Parlare
- team
- Tech
- dice
- di
- che
- Il
- Il blocco
- loro
- poi
- Strumenti Bowman per analizzare le seguenti finiture:
- cose
- quelli
- anche se?
- tempo
- a
- pure
- strumenti
- top
- albero
- seconda
- in definitiva
- us
- utilizzato
- usa
- v1
- versione
- molto
- vitale
- virtuale
- ricercato
- Prima
- modi
- we
- WELL
- sono stati
- quando
- quale
- volere
- WISE
- con
- lavoro
- sarebbe
- ancora
- Tu
- Trasferimento da aeroporto a Sharm
- zefiro