【问题标题】:What are the differences between the processes run by npm command:npm 命令运行的进程之间有什么区别:
【发布时间】:2021-01-27 13:55:41
【问题描述】:

最近我使用 node.js+express 做了一个简单的 API 服务器。下面的脚本是我用来运行 npm 命令的 package.json 文件的一部分。

"scripts": {
  ...
  "release": "cross-env NODE_ENV=production MODE=release node server/app.js",
}

在我用 npm run release 启动服务器后,我可以看到我的 Linux 服务器上正在运行多个进程,如下所示。

/bin/sh /api/node_modules/.bin/cross-env NODE_ENV=development MODE=test node server/app.js
node /api/node_modules/.bin/../cross-env/bin/cross-env.js NODE_ENV=development MODE=test node server/app.js
node server/app.js

我阅读了相关文档here,但我不明白后台实际发生了什么。

  1. 创建进程的顺序是什么? npm => /bin/sh => 节点 /api/.. => 节点服务器/app.js ?
  2. 每个进程的作用是什么?这三个进程都是运行我的服务器所必需的吗?
  3. 如果我想用 pid 杀死服务器,我应该使用哪个进程 ID?

【问题讨论】:

    标签: node.js express npm npm-run


    【解决方案1】:

    创建进程的顺序是什么? npm => /bin/sh => 节点 /api/.. => 节点服务器/app.js ?

    每个进程的作用是什么?这三个进程都是运行我的服务器所必需的吗?

    嗯,流程是这样的:

    • NPM 在你的 shell 中生成(你运行它),npm 本身使用NPX 运行,以便set the local path
    • 您的 npm 脚本从名为 cross-env 的包中生成一个进程,用于跨操作系统环境变量设置。
    • 该进程反过来生成 Node.js(在设置环境变量之后)

    这就是您看到 3 个进程的原因。在您的服务器本身运行之后 - 只需要实际的服务器进程来运行服务器。

    如果我想用 pid 杀死服务器,我应该使用哪个进程 id?

    这个:node server/app.js - 因为那是您的实际服务器,所以其他只是“实用程序”(一个用于您运行的 npm 脚本,另一个用于环境变量)。


    值得一提的是,服务器通常在容器或其他编排器/管理器中运行,这些编排器/管理器具有用于重新启动/终止进程的内置逻辑。通常,编排器会向进程发送 SIGTERM。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-24
      • 2011-04-10
      • 2014-11-12
      • 2010-12-16
      • 2011-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多