我们说我有
"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来探索它的功能。谢谢你的帮助!
答案 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-s
是npm-run-all
提供的快捷方式,可按顺序运行所有给定的npm-script,因此-s
(run-s
是{{1}的缩写}。
答案 3 :(得分:5)
您可以为脚本pre
和post
加上前缀,以便它们自动执行:
"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