在package.json中,我有两个脚本:
"scripts": {
"start-watch": "nodemon run-babel index.js",
"wp-server": "webpack-dev-server",
}
每次开始在Node.js中开发时,我都必须并行运行这两个脚本。我首先想到的是添加第三个脚本,如下所示:
"dev": "npm run start-watch && npm run wp-server"
…但这将在运行wp服务器之前等待开始监视完成。
如何并行运行这些?请记住,我需要查看这些命令的输出。此外,如果您的解决方案涉及构建工具,我宁愿使用gulf而不是gulf,因为我已经在另一个项目中使用了它。
我有一个没有任何额外模块的跨平台解决方案。我正在寻找一个可以在cmd.exe和bash中使用的try-catch块。
解决方案是command1||command2,它似乎在两种环境中都一样。因此,OP的解决方案是:
"scripts": {
"start-watch": "nodemon run-babel index.js",
"wp-server": "webpack-dev-server",
// first command is for the cmd.exe, second one is for the bash
"dev": "(start npm run start-watch && start npm run wp-server) || (npm run start-watch & npm run wp-server)",
"start": "npm run dev"
}
然后,简单的npm-start(和npm-run-dev)将在所有平台上运行!
快速解决方案
在这种情况下,我认为最好的办法是,如果该脚本用于专用模块,只在基于*nix的机器上运行,则可以使用控制运算符来分叉进程,如下所示:&
在部分package.json文件中执行此操作的示例:
{
"name": "npm-scripts-forking-example",
"scripts": {
"bundle": "watchify -vd -p browserify-hmr index.js -o bundle.js",
"serve": "http-server -c 1 -a localhost",
"serve-bundle": "npm run bundle & npm run serve &"
}
然后通过npm-run-serve捆绑包并行执行它们。您可以增强脚本以将分叉进程的pid输出到文件,如下所示:
"serve-bundle": "npm run bundle & echo \"$!\" > build/bundle.pid && npm run serve & echo \"$!\" > build/serve.pid && npm run open-browser",
谷歌类似于bash控件操作符,用于分叉,以了解更多关于其工作原理的信息。我还提供了一些关于在Node项目中利用Unix技术的进一步上下文:
进一步的上下文RE:Unix工具和Node.js
如果您不使用Windows,Unix工具/技术通常可以很好地使用Node脚本实现某些功能,因为:
Node.js中的很多都很好地模仿了Unix原理您使用的是*nix(包括OS X),而NPM使用的是shell
Nodeland中用于系统任务的模块通常也是Unix工具的抽象或近似,从fs到流。