我有以下bash脚本:
node ./build.js & node ./server.js
它创build两个nodejs进程,并行执行它们。 当我按下Ctrl-C
,两个进程都被终止。
我正在试图用Windows cmd shell来做同样的事情。 这是我目前的:
start /B node ./build.js & node ./server.js
它成功启动了相同的两个进程,但是在按下Ctrl-C
它只能杀死第二个进程; node ./build.js
保持活动,我没有简单的方法来终止它从控制台。
可悲的是PowerShell在这里不是一个选项,因为这些脚本应该作为npm脚本的一部分运行,而且它只能使用cmd作为Windows shell。
即使无法直接从节点运行PowerShell命令,只要您可以运行cmd命令,您可以使用powershell.exe来执行任何操作。 在本质上:
powershell -Command "Get-Item ."
现在,到实际的解决方案:
powershell -Command "Start-Process -NoNewWindow node .\server1.js; Start-Process -NoNewWindow node .\server2.js"
上面的命令应该同时启动server1和server2,而Ctrl + C或同等的操作会终止两个子进程。
从npm脚本运行多个进程的跨平台解决方案(Win,Linux,Mac)是安装parallelshell npm库。
npm install parallelshell --save-dev
然后在你的package.json
文件中,你可以定义脚本如下:
"scripts": { "myScript" : "parallelshell \"node ./build.js\" \"node ./server.js\"" }
执行npm run myScript
。 甚至更快 – 调用脚本start
而不是myScript
并执行npm start
。
NB – Windows无法识别单引号,因此脚本中的转义双引号。