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

Can I run two ongoing npm commands in 1 terminal

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

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

如您所见,每次我保存文件时一个 运行s webpack 和一个 运行s 带有 nodemon 的服务器,所以我不必输入 "npm start"或每次我保存文件时的某种东西。

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

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

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

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

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

您可以 运行 在后台使用 & 一个进程(一个和号,而不是两个),但这需要您手动管理它,这会很乏味。有关详细信息,请参阅 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'"

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

简单示例

npm run webpack & npm run server

高级示例: 我 运行 2 个观察者(第一个是 vue 应用程序,第二个是 scss/js 主题文件夹)在 1 window 实际上在 2 个不同的文件夹中。所以双 && 和单 &

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

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

一个缺点是,当您像以前一样按 ctrl-c 停止进程时,它只会关闭当前 运行ning 非后台任务。第一个是背景中的 运行ning,因为紧随其后的是 &。 所以如果你想停止这两个进程,只需关闭终端 window 两个都将完成。

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

杀死最后一个后台进程:

kill %1

kill 最后一条命令

kill $!