Cette page a été traduite par PageTurner AI (bêta). Non approuvée officiellement par le projet. Vous avez trouvé une erreur ? Signaler un problème →
Configuration du pipeline de tâches
Lerna délègue l'exécution des scripts npm (processus parallèles etc.) à Nx. Le fichier nx.json est l'endroit où vous pouvez configurer le fonctionnement de Nx.
Si vous n'avez pas de fichier nx.json, exécutez npx lerna add-caching.
Exécuter des tâches en parallèle
Si vous souhaitez augmenter le nombre de processus exécutant les scripts à, par exemple, 5 (par défaut, c'est 3), passez la commande suivante :
npx lerna run build --concurrency=5
Définir les dépendances entre tâches (pipeline de tâches)
Sans aide, Lerna ne peut pas savoir quelles cibles (scripts) ont des prérequis. Vous pouvez définir les dépendances entre tâches dans le fichier nx.json :
{
...
"targetDefaults": {
"build": {
"dependsOn": ["^build"]
}
}
}
Ainsi, Lerna sait qu'avant de construire un projet, il doit d'abord construire toutes ses dépendances. En revanche, aucune contrainte n'est appliquée pour les tests.
Une fois la propriété
targetDefaultsdéfinie, le flag --sort est ignoré.
Ce mécanisme est très flexible. Examinons cet exemple :
{
...
"targetDefaults": {
"build": {
"dependsOn": ["^build", "prebuild"]
},
"test": {
"dependsOn": ["build"]
}
}
}
Note : les anciennes versions de Nx utilisaient targetDependencies au lieu de targetDefaults. Les deux fonctionnent encore, mais targetDefaults est recommandé.
Le symbole ^ (dit "caret") désigne simplement les dépendances. Ainsi, "test": { "dependsOn": ["build"] } signifie que la cible "test" d'un projet dépend de sa propre cible "build". Tandis que "build": { "dependsOn": ["^build"] } signifie que la cible "build" d'un projet dépend de la cible "build" de toutes ses dépendances.
Lors de l'exécution de lerna run test --scope=myproj, cette configuration indiquerait à Lerna de :
-
Exécuter la commande
testpourmyproj -
Mais comme une dépendance
test -> buildest définie, Lerna exécute d'abordbuildpourmyproj. -
builddéfinit elle-même une dépendance surprebuild(même projet) et surbuilddes dépendances. Elle exécutera donc le scriptprebuildet le scriptbuildpour toutes les dépendances.
Notez que Lerna n'a pas besoin d'exécuter toutes les constructions avant de lancer les tests. L'orchestrateur exécutera autant de tâches en parallèle que possible tant que les contraintes sont respectées.
Ce type de situation est assez courant :
Les règles définies dans nx.json s'appliquent à tous les projets du dépôt. Vous pouvez également définir des règles spécifiques à un projet en les ajoutant dans son package.json.
{
...
"nx": {
"targets": {
"test": {
"dependsOn": [
"build"
]
}
}
}
}