Aller au contenu principal
Traduction Bêta Non Officielle

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.

astuce

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 :

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é targetDefaults définie, le flag --sort est ignoré.

Ce mécanisme est très flexible. Examinons cet exemple :

nx.json
{
...
"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 :

  1. Exécuter la commande test pour myproj

  2. Mais comme une dépendance test -> build est définie, Lerna exécute d'abord build pour myproj.

  3. build définit elle-même une dépendance sur prebuild (même projet) et sur build des dépendances. Elle exécutera donc le script prebuild et le script build pour 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 :

Combinaison de cibles

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"
]
}
}
}
}