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 →

Configurazione dei File Pubblicati

Quando si pubblica un pacchetto su un registry, per impostazione predefinita viene pubblicato tutto il contenuto della directory sorgente. Questo approccio non è sempre ottimale, poiché spesso sono presenti file rilevanti solo per lo sviluppo, come test e file di configurazione. Inoltre, potrebbe essere necessario compilare prima i sorgenti e indirizzare l'output in una posizione centralizzata in una configurazione monorepo.

Lerna offre diverse opzioni di configurazione per garantire che vengano impacchettati e pubblicati solo i file appropriati su un registry.

"files" e .gitignore

Lerna utilizza sempre gli strumenti di npm per la pubblicazione, che includono metodi integrati per includere o escludere file. Il modo più semplice per configurare i file inclusi nel pacchetto pubblicato è attraverso la proprietà "files" in package.json e il file .gitignore. Consulta la documentazione npm per maggiori informazioni su come npm riconosce i file per la pubblicazione.

--contents [legacy -> preferire --directory]

Diversi comandi, inclusi lerna publish, supportano l'opzione generica --contents, che imposta la directory di pubblicazione per TUTTI i pacchetti.

Questa opzione è utile solo se i pacchetti nel tuo monorepo hanno una struttura di output semplice e uniforme. L'argomento passato a --contents deve essere una sottodirectory esistente in ogni pacchetto da pubblicare. Vedi la documentazione di lerna publish per i dettagli.

Nella versione 7, abbiamo introdotto per lerna publish l'opzione --directory, più potente e mirata. Ti consigliamo di preferirla rispetto a --contents, che verrà probabilmente deprecata in futuro.

--directory

Nella versione 7, abbiamo introdotto per lerna publish l'opzione --directory, più potente e mirata.

Può essere configurata nel tuo lerna.json e supporta i seguenti segnaposto dinamici: {workspaceRoot}, {projectRoot}, {projectName}. Questi valori verranno sostituiti dinamicamente al momento della pubblicazione.

Ciò significa che puoi ora esprimere in modo conciso configurazioni uniformi nello stile ma non letteralmente identiche tra tutti i pacchetti.

Ad esempio, supponiamo di avere un monorepo in cui compiliamo tutti i pacchetti e i loro output sono impostati per essere indirizzati in una posizione centralizzata (come avviene comunemente nelle workspace Nx):

Abbiamo packages/package-a che scrive il suo output di build in dist/packages/package-a, e packages/package-b che scrive il suo output in dist/packages/package-b.

Nonostante i percorsi siano tecnicamente diversi, abbiamo un approccio coerente che possiamo ora esprimere usando i segnaposto:

{workspaceRoot}/dist/{projectRoot}

{workspaceRoot} verrà sostituito dal percorso assoluto della nostra repo Lerna, mentre {projectRoot} sarà sostituito da packages/package-a nel caso di package-a, e da packages/package-b nel caso di package-b.

Il modo in cui applichiamo questa configurazione nel lerna.json è il seguente:

// lerna.json
{
"version": "1.0.0",
"command": {
"publish": {
"directory": "{workspaceRoot}/dist/{projectRoot}"
}
}
}

Puoi anche impostare o sovrascrivere l'opzione della directory di pubblicazione all'interno del package.json di un pacchetto, se hai bisogno di una configurazione completamente personalizzata per quel pacchetto specifico.

Un esempio di configurazione per un pacchetto che pubblica dalla cartella dist/packages/foo nella root della repo:

// packages/foo/package.json
{
"name": "foo",
"version": "1.0.0",
"lerna": {
"command": {
"publish": {
"directory": "../../dist/packages/foo"
}
}
}
}
informazioni

È necessario assicurarsi che la directory personalizzata contenga un package.json valido per la pubblicazione nel registro. Puoi crearlo tramite script del ciclo di vita come prepare, prepublishOnly o prepack se necessiti logiche personalizzate complesse, oppure configurarlo come asset per la copia automatica dalla sorgente del pacchetto. Consulta la prossima sezione su Inclusione di Asset Aggiuntivi nei Pacchetti Pubblicati per i dettagli completi.

Per far sì che un pacchetto si comporti come un pacchetto Lerna standard pubblicando dalla sorgente, puoi sovrascriverne la configurazione di pubblicazione così:

// packages/foo/package.json
{
"name": "foo",
"version": "1.0.0",
"lerna": {
"command": {
"publish": {
"directory": "."
}
}
}
}

Inclusione di Asset Aggiuntivi nei Pacchetti Pubblicati

Lerna può copiare file dalla directory sorgente alla directory specificata per la pubblicazione. Come per l'opzione directory, questo può essere configurato in lerna.json (inclusi i segnaposto dinamici nelle definizioni degli asset) o nel package.json di un pacchetto specifico.

Indipendentemente dal file di configurazione, la proprietà "assets" deve essere un array di pattern glob oppure oggetti con proprietà "from" e "to". La proprietà "from" deve essere un file specifico o un pattern glob che corrisponda a file nella directory sorgente, mentre "to" è il percorso di destinazione nella directory di pubblicazione.

Questo pacchetto di esempio compila l'output in una directory dist/packages/bar a livello root. Lerna è configurata per copiare file aggiuntivi in questa directory, poi pubblica i contenuti di dist/packages/bar su npm.

// packages/bar/package.json
{
"name": "bar",
"version": "1.0.0",
"lerna": {
"command": {
"publish": {
"directory": "../../dist/packages/bar",
"assets": [
"README.md",
"package.json",
"docs/*.md",
{
"from": "static/images/*",
"to": "assets"
},
{
"from": "../../CONTRIBUTING.md",
"to": "./"
}
]
}
}
}
}

Lerna elaborerà la configurazione sopra copiando i file appropriati nella directory dist, producendo una struttura come questa:

dist/packages/bar
├── assets
│ ├── my-image-1.png
│ └── my-image-2.png
├── CONTRIBUTING.md
├── docs
│ ├── my-doc-1.md
│ └── my-doc-2.md
├── package.json
└── README.md