【问题标题】:Can I run two ongoing npm commands in 1 terminal我可以在 1 个终端中运行两个正在进行的 npm 命令吗
【发布时间】:2018-03-25 10:25:51
【问题描述】:

我的 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 命令正在进行中并且永远不会到达第二个命令。

有没有办法将这两个命令放在一个终端中,这甚至是可取的吗?

【问题讨论】:

  • 它比它的价值更复杂。为什么不直接使用 tmux 或类似的多路复用器并在单独的窗格中运行它们呢?如果你在 macos 上使用 iterm2,你可以拆分窗口。
  • 尝试将 webpack 命令添加到 "prestart" 部分并简单运行 node start

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


【解决方案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'"

【讨论】:

  • 谢谢!同时工作就像一个魅力,你只是省去了在终端之间不断切换的麻烦。
【解决方案2】:

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

简单示例

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

杀死最后一条命令

kill $!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    • 2023-04-03
    • 1970-01-01
    相关资源
    最近更新 更多