2016-08-26 140 views
38

比方说,我有运行NPM脚本顺序

"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来探索其功能。谢谢你的帮助!

回答

89

通过NPM调用运行这些脚本,并把它们连双符号&&

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

说明:

  • 使用&&(双号)的顺序执行。
  • 用于并行执行的使用&(单个&符号)。
+1

这样做效果最好,因为它按顺序执行,因为每个命令都不会按OP中的要求执行,直到完成前面的操作。谢谢 – Rice

13

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

+0

我会要求他们等待对方完成,这些会依次启动,但不会等待。 – Rice

+0

我不认为这是一个节点/ NPM问题。在技​​术上*在Windows中执行的'start'命令已完成。在'start'中使用'/ wait'标志强制'start'应用程序保持打开状态,直到内部方法也完成。 – dvlsg

+0

要测试这个 - 从命令提示符运行'start notepad',然后看看原来的命令提示符。你应该可以输入另一个命令。然后运行'start/wait notepad'。记事本窗口打开时,'start'命令应该继续“运行”(再次查看命令提示符)。然后,一旦你关闭记事本,“开始”将完成。 – dvlsg