我可以在1个终端中运行两个正在进行的npm命令

时间:2017-10-13 09:58:43

标签: node.js npm webpack nodemon npm-scripts

我的npm脚本中有这两个命令

"scripts": {
"webpack": "webpack --config webpack.config.js --watch",
"server": "nodemon server.js",
}

正如您所看到的,每次保存文件时都会运行webpack,而只使用nodemon运行服务器,因此我不必键入" npm start"或者每次我保存文件时都有类似的东西。

现在这个工作正常,但是我需要2个终端打开才能运行它,它在我的屏幕上会有点拥挤。

而且我不能像这样读一个命令:

"start": "npm run webpack && npm run server"

因为webpack命令正在进行,并且永远不会到达第二个命令。

有没有办法在1个终端中使用这两个命令,这是否可取?

2 个答案:

答案 0 :(得分:7)

您可以在后台使用&(一个&符号,而不是两个)运行一个进程,但这需要您手动管理它,这将是相当繁琐的。有关详细信息,请参阅What does ampersand mean at the end of a shell script line?

对于那个有人构建concurrently的用例,这使得并行运行流程并跟踪其输出变得简单。

npm install --save-dev concurrently

您的start脚本变为:

"start": "concurrently 'npm run webpack' 'npm run server'"

如果您想让输出更漂亮一点,您可以使用-n提供流程名称,使用-c提供颜色,例如:

"start": "concurrently -n 'webpack,server' -c 'bgBlue.bold,bgGreen.bold' 'npm run webpack' 'npm run server'"

答案 1 :(得分:1)

实际上很容易,如果您不想等待第一个完成,请使用代替 && 。通过在命令末尾添加,您可以告诉它在后台执行。

简单示例

npm run webpack & npm run server

高级示例: 我实际上在2个不同文件夹的1个窗口中运行了2个监视程序(1个是vue应用程序,第二个是scss / js主题文件夹)。因此,双重&&和单一&

的组合
(cd ~/some-path && yarn encore dev --watch) & (cd ~/some-other-path/ && yarn run dev)

两个观察者的输出是混合的,但实际上没有问题。只有可读性会降低。

一个缺点是,当您按ctrl-c来停止以前执行的进程时,它只会关闭当前正在运行的非后台任务。第一个在后台运行,因为其后跟。 因此,如果要停止这两个过程,只需关闭终端窗口,这两个过程都将完成。

或按ctrl-c停止打开过程 然后执行以下命令:

杀死最后的后台进程

kill %1

OR

杀死最后一个命令

kill $!