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 della Pipeline di Attività

Lerna delega l'esecuzione degli script npm (come il forking dei processi) a Nx. Il file nx.json è il luogo dove puoi configurare come Nx gestisce questa operazione.

consiglio

Se non disponi del file nx.json, esegui npx lerna add-caching.

Eseguire Attività in Parallelo

Se vuoi aumentare il numero di processi che eseguono gli script a, ad esempio, 5 (di default sono 3), passa il seguente parametro:

npx lerna run build --concurrency=5

Definire Dipendenze tra Attività (dette anche Pipeline di Attività)

Senza il nostro aiuto, Lerna non può sapere quali target (script) hanno prerequisiti e quali no. Puoi definire le dipendenze tra attività nel file nx.json:

nx.json
{
...
"targetDefaults": {
"build": {
"dependsOn": ["^build"]
}
}
}

In questo modo, Lerna sa che prima di poter costruire un progetto, deve costruire prima tutte le sue dipendenze. Non ci sono invece vincoli per i test.

Una volta definita la proprietà targetDefaults, il flag sort viene ignorato.

Questo meccanismo è molto flessibile. Esaminiamo questo esempio:

nx.json
{
...
"targetDefaults": {
"build": {
"dependsOn": ["^build", "prebuild"]
},
"test": {
"dependsOn": ["build"]
}
}
}

Nota: le versioni precedenti di Nx utilizzavano targetDependencies invece di targetDefaults. Entrambi funzionano ancora, ma è consigliato targetDefaults.

Il simbolo ^ (detto anche caret) indica semplicemente le dipendenze. Quindi, mentre "test": { "dependsOn": ["build"] } significa che il target "test" di un progetto specifico dipende dal proprio target "build" che deve essere completato prima dell'esecuzione, "build": { "dependsOn": ["^build"] } significa che il target "build" di un progetto specifico dipende dal target "build" di tutte le dipendenze del progetto, che devono essere completate prima della sua esecuzione.

Quando esegui lerna run test --scope=myproj, la configurazione sopra indicata direbbe a Lerna di:

  1. Eseguire il comando test per myproj

  2. Ma poiché è definita una dipendenza test -> build, Lerna esegue prima build per myproj

  3. build stesso definisce una dipendenza su prebuild (nello stesso progetto) e sul build di tutte le dipendenze. Quindi eseguirà lo script prebuild e lo script build per tutte le dipendenze

Nota: Lerna non deve eseguire tutti i build prima di iniziare i test. L'orchestratore di attività eseguirà il maggior numero possibile di attività in parallelo purché siano rispettati i vincoli.

Situazioni come questa sono abbastanza comuni:

Combinazione di Target

Poiché abbiamo descritto le regole in nx.json, si applicheranno a tutti i progetti nel repository. Puoi anche definire regole specifiche per progetto aggiungendole nel package.json del progetto.

{
...
"nx": {
"targets": {
"test": {
"dependsOn": [
"build"
]
}
}
}
}