Vai al contenuto principale
Traduzione Beta Non Ufficiale

Questa pagina è stata tradotta da PageTurner AI (beta). Non ufficialmente approvata dal progetto. Hai trovato un errore? Segnala problema →

Versione e Pubblicazione

Lerna può incrementare le versioni dei tuoi pacchetti e pubblicarli su NPM, offrendo diverse opzioni per adattarsi a qualsiasi flusso di lavoro.

Per mostrare come funziona, esamineremo questo repository.

Se impari meglio facendo pratica, clona la repo e segui gli esempi.

La repository contiene tre pacchetti o progetti:

  • header (una libreria di componenti React)

  • footer (una libreria di componenti React)

  • remixapp (un'app realizzata con il framework Remix che dipende sia da header che da footer)

Pubblicheremo i pacchetti header e footer.

È comune pubblicare solo un sottoinsieme dei progetti. Alcuni possono essere privati (ad esempio usati solo per test), altri possono essere app dimostrative. In questa repo, remixapp non è "privato" nel senso di nascondere il codice sorgente, ma utilizza l'impostazione "private": true per evitare la pubblicazione su NPM.

Gestione delle versioni

Lerna include il comando version che permette di incrementare il numero di versione dei pacchetti, commitare le modifiche e taggarle di conseguenza.

lerna version --no-private

otterrai il seguente output:

lerna notice cli v5.1.2
lerna info current version 1.0.0
lerna info Assuming all packages changed
? Select a new version (currently 1.0.0) (Use arrow keys)
❯ Patch (1.0.1)
Minor (1.1.0)
Major (2.0.0)
Prepatch (1.0.1-alpha.0)
Preminor (1.1.0-alpha.0)
Premajor (2.0.0-alpha.0)
Custom Prerelease
Custom Version
informazioni

Nota che passando --no-private escludiamo tutti i pacchetti contrassegnati come private nel loro file package.json.

Lerna rileva i pacchetti esistenti, identifica la versione corrente e propone la successiva da scegliere. Puoi anche specificare direttamente un incremento semver come lerna version 1.0.0. Maggiori dettagli nella documentazione sulle versioni. Una volta scelta la versione, Lerna aggiorna il package.json, esegue il commit delle modifiche, aggiunge un tag di versione corrispondente (es. v1.0.0) e pusha commit e tag al repository remoto.

packages/footer/package.json
{
"name": "footer",
"version": "1.0.1",
"main": "dist/index.js",
...
}

Nota: questa operazione non pubblica i pacchetti su alcun repository NPM. Per gestire anche il processo di pubblicazione, usa invece lerna publish.

informazioni

Lerna utilizza la proprietà version in lerna.json per determinare la versione corrente.

Pubblicazione su NPM

Se eseguiamo

lerna publish --no-private

Lerna esegue il flusso di incremento versione (come lerna version) e in più pubblica i pacchetti su NPM. Dovresti vedere questo output:

Terminal Output
lerna notice cli v5.1.2
lerna info current version 1.0.0
lerna info Assuming all packages changed
? Select a new version (currently 1.0.0) Patch (1.0.1)

Changes:
- footer: 1.0.0 => 1.0.1
- header: 1.0.0 => 1.0.1

? Are you sure you want to publish these packages? Yes
lerna info execute Skipping releases
lerna info git Pushing tags...
lerna info publish Publishing packages to npm...
...
lerna success published header 1.0.1
...
lerna success published footer 1.0.1
...
Successfully published:
- footer@1.0.1
- header@1.0.1
lerna success published 2 packages

from-package

Un altro metodo per determinare quali pacchetti pubblicare è from-package. Lerna confronta la versione di ogni pacchetto nel repository con quella pubblicata su npm. Per ogni pacchetto con versione maggiore di quella pubblicata, Lerna lo pubblica su npm.

Questa modalità non richiede che i pacchetti siano stati versionati con lerna version, rendendola ideale per workspace con script di versionamento personalizzati.

lerna publish from-package
informazioni

Lerna utilizza sempre npm per pubblicare i pacchetti. Se usi un package manager diverso da npm, dovrai comunque configurare .npmrc per la pubblicazione, anche se npmClient in lerna.json è impostato su qualcosa di diverso da npm.

Strategie di versionamento

Lerna permette di gestire i progetti in due modalità: Fissa o Indipendente.

Modalità Fissa/Bloccata (predefinita)

I progetti Lerna in modalità fissa operano su un'unica linea di versione. La versione è conservata nel file lerna.json nella radice del tuo progetto sotto la chiave version. Quando esegui lerna publish, se un pacchetto è stato aggiornato dall'ultimo rilascio, verrà aggiornato alla nuova versione che stai pubblicando. Ciò significa che pubblichi una nuova versione di un pacchetto solo quando necessario.

Nota: Se hai una versione major zero, tutti gli aggiornamenti sono considerati breaking. Per questo motivo, eseguire lerna publish con versione major zero e selezionando qualsiasi numero di versione non prerelease causerà la pubblicazione di nuove versioni per tutti i pacchetti, anche se non tutti sono stati modificati dall'ultimo rilascio.

Usa questa modalità se vuoi collegare automaticamente tutte le versioni dei pacchetti. Uno svantaggio di questo approccio è che una modifica major in qualsiasi pacchetto comporterà una nuova versione major per tutti i pacchetti.

Versioni sincronizzate

Lerna aggiorna e pubblica solo i pacchetti modificati dall'ultimo rilascio, causando nel tempo una deriva delle versioni. Per evitarlo, usa l'opzione --force-publish con lerna version. Questo forza Lerna ad aggiornare sempre tutti i pacchetti, indipendentemente dalle modifiche. Saranno poi tutti pubblicati sul registro tramite lerna publish from-git. Di conseguenza, tutte le versioni dei pacchetti rimarranno sincronizzate con la versione in lerna.json.

Modalità indipendente

npx lerna init --independent

I progetti Lerna in modalità indipendente permettono ai maintainer di aggiornare le versioni dei pacchetti indipendentemente l'una dall'altra. Ad ogni pubblicazione, riceverai una richiesta per ogni pacchetto modificato per specificare se si tratta di una patch, minor, major o modifica personalizzata.

La modalità indipendente consente aggiornamenti più mirati per ogni pacchetto ed è ideale per gruppi di componenti. Combinare questa modalità con strumenti come semantic-release ne semplificherebbe l'utilizzo. (Sono in corso lavori su questo aspetto in atlassian/lerna-semantic-release).

Imposta la chiave version in lerna.json su independent per attivare la modalità indipendente.