假设我有
"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来探索它的功能。谢谢你的帮助!
9条答案
按热度按时间vawmfj5a1#
通过npm run调用这些脚本,并使用两个与号**
&&
**将它们链接起来:说明:
&&
**(双与号)进行顺序执行。&
**(单个与号)进行并行执行。1yjd4xko2#
在@ Mobilecartainment强大的answer之后,您还可以使用npm-run-all使命令更短、更易读。
run-s
是npm-run-all
提供的快捷方式,它按顺序运行所有给定的npm脚本,因此是-s
(run-s
是npm-run-all -s
的较短版本)。nszi6y053#
您可以为脚本添加前缀
pre
和post
,以便它们自动执行:然后运行
npm run build
g9icjywg4#
您可以将它们串入另一个脚本中。
"start": "pre-build && build_logic && post_build && exit"
yeotifhr5#
可以使用npm-run-all以多种不同的方式合并多个命令
例如,如果
package.json
中有以下脚本:您可以像这样依次运行它们:
请参阅how to run multiple npm commands in parallel的此问题
yyhrrdl86#
您可以尝试:
vom3gejh7#
有几个选项比公认的答案更好:
&&
-按顺序运行命令,只要每个命令都成功:command && command && command
;在 * 大多数 * shell中支持(早期版本的Powershell不支持此功能)(感谢@Mobiletainment);
-按顺序运行命令,忽略成功/失败;在大多数(如果不是全部) shell 中得到支持npm-run-all
软件包-可按顺序或并行运行多个命令;有关用法,请参阅the documentation(感谢@Or A.)concurrently
包-并行运行多个命令(包括在内,因为这是一个流行的谷歌结果);有关用法,请参阅文档az31mfrm8#
顺序和并行混合示例
如果您需要混合,下面是我所做的,以确保command_1首先运行并完成,而command_2a和command_2b可以并行运行。
示例:
iqxoj9l99#
对于所有在2023年读到这个问题的人,现在,Windows WSL允许您运行Linux命令串联样式'&',而无需安装额外的依赖项。
我们可以从PowerShell/cmd绕过WSL命令,如下所示
wsl npm run build & npm start
这将略微取决于您要运行的指令类型,例如.bat、.sh...