web-dev-qa-db-fra.com

Exécution séquentielle des scripts NPM

Disons que j'ai

"scripts": {
    "pre-build": "echo \"Welcome\" && exit 1",
    "build_logic": "start cmd.exe @cmd /k \"yo esri-appbuilder-js:widget && exit 1\"",
    "post_build":  "start C:\\WebAppBuilderForArcGIS\\startupShortcut",
    "exit" : "start cmd.exe @cmd /k \"echo \"goodbye\" && exit 1\""
  },

Quelle commande NPM puis-je exécuter pour laisser tous ces scripts se lancer séquentiellement. Lorsque j'utilise une correction avant/après, ils se lancent séquentiellement mais n'attendent pas que le script parent se termine avant de s'exécuter. Je suppose que la seule solution est la suivante: Comment faire en sorte que les tâches Gulp soient déclenchées de manière séquentielle lors de l'exécution de commandes Shell dans une fonction d'assistance async.series? ? Je sais que cela peut être fait avec Gulp, mais je voudrais maintenant rester avec NPM pour explorer ses capacités. Merci pour toute aide!

106
Rice

Appelez ces scripts via npm run et chaînez-les avec une double esperluette &&:

_npm run pre-build && npm run build_logic && npm run post_build && npm run exit
_

Explication:

  • Utilisez && (double et commercial) pour une exécution séquentielle.
  • Utilisez & (simple esperluette) pour une exécution en parallèle.
223
Mobiletainment

Vous pouvez simplement les chaîner dans un autre script. "start": "pre-build && build_logic && post_build && exit"

19
Dave V

Suite à la grande réponse de @ Mobiletainment, vous pouvez également utiliser npm-run-all pour rendre la commande beaucoup plus courte et beaucoup plus lisible. Dans ton cas:

"scripts": {
    ...
    "build": "run-s pre-build build_logic post_build exit"
}

run-s est un raccourci fourni par npm-run-all, qui exécute tous les scripts npm donnés en séquence, d'où le -s (run-s est une version plus courte de npm-run-all -s).

18
Or A.

Vous pouvez préfixer vos scripts pre et post pour qu'ils s'exécutent automatiquement:

"scripts": {
  "prebuild": "echo \"Welcome\" && exit 1",
  "build": "start cmd.exe @cmd /k \"yo esri-appbuilder-js:widget && exit 1\"",
  "postbuild":  "start C:\\WebAppBuilderForArcGIS\\startupShortcut",
  "exit" : "start cmd.exe @cmd /k \"echo \"goodbye\" && exit 1\""
}

puis lancez npm run build

10
Tzach Ovadia