Questa pagina è stata tradotta da PageTurner AI (beta). Non ufficialmente approvata dal progetto. Hai trovato un errore? Segnala problema →
Gestione Pacchetti Legacy
Nella v9 di lerna, rilasciata a settembre 2025, i comandi lerna bootstrap, lerna add e lerna link sono stati definitivamente rimossi dopo oltre 2 anni di deprecazione.
Se stai ancora utilizzando questi comandi, migra alla funzionalità workspaces dei gestori pacchetti, supportata da tempo.
La guida seguente fornirà il contesto e ti aiuterà a capire perché e come effettuare la migrazione.
Migrazione da lerna bootstrap, lerna add e lerna link in lerna v7 e versioni successive
Già nel giugno 2023, con lerna v7.0.0, abbiamo rimosso per impostazione predefinita i comandi lerna bootstrap, lerna add e lerna link. Oltre due anni dopo, nella v9.0.0 di lerna, i comandi sono stati definitivamente eliminati.
Questa sezione spiega come migrare al meglio dal loro utilizzo e modernizzare la configurazione sfruttando le workspaces del gestore pacchetti. Per il contesto completo sul perché sia necessario, consulta Background qui sotto.
Il cambiamento mentale cruciale è riconoscere che lerna non è responsabile dell'installazione e del linking delle dipendenze nel tuo repository: il tuo gestore pacchetti è molto più adatto a questo compito.
Per ottenere ciò, utilizza la funzionalità workspaces del tuo gestore pacchetti. Consulta la relativa documentazione:
-
pnpm(https://pnpm.io/workspaces)
Utilizzando le workspaces, il tuo gestore pacchetti eseguirà lo stesso linking preciso che lerna bootstrap e lerna link facevano per te, con la differenza che ora è integrato direttamente nel comando install. Non sono necessari comandi aggiuntivi dopo l'installazione (purché tu abbia configurato le workspaces come indicato nella documentazione del gestore pacchetti).
Lo stesso principio si applica alla sostituzione di lerna add. Aggiungere e rimuovere dipendenze è già una funzionalità del tuo gestore pacchetti, e poiché le workspaces sono un caso d'uso nativo, puoi eseguire un comando install appropriato per aggiungere una dipendenza a un pacchetto/workspace specifico: tutto il linking locale rilevante avverrà automaticamente.
Vedi sotto per confronti concreti ed esempi di utilizzo prima/dopo.
Sostituzione dell'utilizzo di lerna bootstrap/lerna link
Cosa fa?
lerna bootstrap veniva usato al posto di npm install (o yarn/pnpm). Installava tutti i pacchetti esterni e collegava tutti i pacchetti interni nella workspace. lerna link eseguiva solo la fase di linking interno di questa operazione.
Dove si trova?
Solitamente nella proprietà "scripts" del package.json nella root della workspace. Verifica anche le pipeline CI, poiché potrebbero chiamare lerna bootstrap invece di npm install (o yarn/pnpm).
Con cosa lo sostituisco?
Sostituisci lerna bootstrap con npm install (o yarn/pnpm). Se esegui già il comando install del gestore pacchetti nel tuo flusso prima di dove chiamavi lerna bootstrap, puoi semplicemente eliminarlo. lerna link può essere rimosso, poiché il linking è ora gestito dal gestore pacchetti durante npm install.
Se usi yarn e dipendi dal linking di binari, potresti dover eliminare la cartella node_modules una volta dopo il passaggio alle workspaces. Per dettagli, vedi questo issue di yarn.
Sostituzione dell'utilizzo di lerna add
Cosa fa?
lerna add veniva usato per aggiungere una dipendenza ai pacchetti nella workspace. Aggiornava i file package.json di ogni pacchetto per aggiungere la dipendenza.
Dove si trova?
Sebbene solitamente chiamato manualmente, lerna add potrebbe trovarsi in alcuni script nel package.json della root della workspace.
Con cosa lo sostituisco?
lerna add può essere sostituito principalmente con una variante di npm install (o yarn/pnpm). L'utilizzo più comune di lerna add consisteva nell'aggiungere una singola dipendenza a un singolo pacchetto all'interno dell'area di lavoro. Questo comando appare così:
lerna add <dependency> --scope <package>
e può essere sostituito direttamente con:
npm install <dependency> -w <package>
Il flag -w indica a npm di installare la dipendenza solo nel pacchetto dell'area di lavoro specificato da <package>, in modo simile all'opzione --scope di Lerna.
Se è necessario aggiungere una dipendenza a più pacchetti, è possibile utilizzare più volte l'opzione -w:
npm install <dependency> -w <package1> -w <package2>
Hoisting Personalizzato
Uno dei vantaggi del comando legacy bootstrap di lerna era il controllo che offriva sull'hoisting o meno di determinate dipendenze alla radice del repository, o lasciandole in posizioni annidate.
Pertanto, potreste essere preoccupati di abbandonare lerna bootstrap se avete una configurazione piuttosto personalizzata in termini di hoisting dei pacchetti.
Nella nostra esperienza di test dei vari gestori di pacchetti, abbiamo riscontrato che la versione moderna di yarn (ovvero v3 e successive) offre la maggiore flessibilità in termini di controlli di hoisting:
https://yarnpkg.com/configuration/yarnrc/#nmHoistingLimits
Non abbiamo ancora trovato un repository basato su lerna bootstrap, per quanto complesse fossero le configurazioni di hoisting, che non potesse essere convertito alla versione moderna di yarn, quindi vi invitiamo a provare se questo è il vostro caso.
Se stavate utilizzando lerna bootstrap senza particolari preoccupazioni avanzate di hoisting, sentitevi liberi di scegliere uno qualsiasi dei gestori di pacchetti, poiché tutti offrono implementazioni robuste delle workspaces.
Polyfill temporaneo per i comandi legacy di gestione pacchetti
Se ti fossi trovato bloccato e avessi avuto bisogno dei comandi legacy di gestione pacchetti (lerna bootstrap, lerna add e lerna link) nelle versioni v7 o v8, avresti potuto installare il pacchetto @lerna/legacy-package-management alla stessa versione del tuo pacchetto lerna, che ripristinava i comandi con le loro implementazioni originali.
È importante sottolineare che questa è stata solo una soluzione temporanea e che il pacchetto è entrato immediatamente in modalità manutenzione: nessuna nuova funzionalità è stata considerata per le problematiche di gestione pacchetti legacy (come lerna bootstrap, lerna add e lerna link), ma abbiamo incorporato patch critiche e aggiornamenti di sicurezza.
Tutto il supporto per @lerna/legacy-package-management è stato rimosso nella v9, oltre 2 anni dopo la sua introduzione come polyfill temporaneo, dando ai team ampio tempo per migrare.
Contesto
Lerna è lo strumento originale per monorepo/workspace nell'ecosistema JavaScript. Quando è stato creato nel 2015/2016 l'ecosistema era completamente diverso, e non c'erano funzionalità integrate per gestire più pacchetti in un singolo repository (una "workspace"). Comandi come lerna bootstrap, lerna add e lerna link erano tutti parti critiche del progetto lerna, perché non c'erano alternative.
Tuttavia, il fatto è che - ormai da molti anni - i gestori pacchetti che conosciamo e amiamo (npm, yarn e pnpm) supportano pienamente il concetto di workspaces come caso d'uso nativo.
Hanno implementazioni collaudate che coprono l'aggiunta, la rimozione e il collegamento di pacchetti locali, e li combinano con dipendenze di terze parti in modo naturale.
Questo è il motivo per cui, negli ultimi anni del suo mandato come maintainer principale di lerna, Daniel ha incoraggiato le persone a riconsiderare fortemente l'uso dei comandi legacy di gestione pacchetti in lerna, e invece sfruttare il loro gestore di pacchetti preferito per fare ciò che sa fare meglio.
Eravamo a conoscenza di questo contesto da tempo, ma come nuovi custodi del progetto nel 2022 non volevamo agire precipitosamente rimuovendo funzionalità senza prima prendere confidenza con la realtà operativa. Ora che abbiamo gestito attivamente il progetto per un periodo significativo, concordiamo pienamente con Daniel e altri membri della comunità sulla necessità di ritirare i comandi legacy di gestione dei pacchetti in Lerna.
Rimuovendo questi componenti legacy che hanno alternative migliori native nei gestori pacchetti, noi e il resto della community lerna siamo ora liberi di concentrare gli sforzi sugli aspetti più preziosi di lerna (come, ma non limitato a, versioning e pubblicazione), rendendoli il meglio possibile!
Lo stesso contesto è trattato nella discussione su Lerna v7. Se hai dubbi specifici, ti invitiamo a partecipare fornendo più dettagli possibili!