按顺序运行NPM脚本

时间:2016-08-26 18:22:27

标签: javascript node.js npm cmd

我们说我有

"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\""
  },

我可以运行什么NPM命令让所有这些脚本按顺序启动。当我使用前/后修复时,它们会按顺序启动,但在执行之前不会等待父脚本完成。我假设唯一的解决方案是:How do I get Gulp tasks to fire sequentially when firing shell commands in an async.series helper function??我知道这可以用Gulp完成,但我现在想坚持使用NPM来探索它的功能。谢谢你的帮助!

6 个答案:

答案 0 :(得分:196)

通过npm run调用这些脚本,并使用双&符号 && 链接它们:

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

说明:

  • 使用 && (双&符号)进行顺序执行。
  • 使用 & (单个&符号)进行并行执行。

答案 1 :(得分:17)

您可以将它们串入另一个脚本。 "start": "pre-build && build_logic && post_build && exit"

答案 2 :(得分:16)

在@Mobiletainment出色的answer之后,您还可以使用npm-run-all使该命令更短,更易读。就您而言:

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

run-snpm-run-all提供的快捷方式,可按顺序运行所有给定的npm-script,因此-srun-s是{{1}的缩写}。

答案 3 :(得分:5)

您可以为脚本prepost加上前缀,以便它们自动执行:

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

然后运行npm run build

答案 4 :(得分:5)

您可以尝试:


"scripts": {
  "clean-dist": "rm -f ./dist/*.js && rm -f ./dist/*.map",
  "build": "npm run clean-dist && parcel build ./packages/index.html"
},

答案 5 :(得分:1)

您可以使用npm-run-all以多种不同方式组合多个命令

例如,如果您的package.json中包含以下脚本:

"scripts": {
    "clean": "rimraf dist",
    "lint":  "eslint src",
    "build": "babel src -o lib"
}

您可以按如下顺序依次运行它们:

$ npm-run-all clean lint build

请参见how to run multiple npm commands in parallel的问题