【问题标题】:What happens under the hood when you call `npm run` to run a NPM script?当你调用 `npm run` 来运行 NPM 脚本时,底层会发生什么?
【发布时间】:2021-03-03 22:43:31
【问题描述】:

我想详细了解 NPM 脚本的工作原理。

例如:

package.json

"scripts": {
  "build": "set NODE_ENV=production&& webpack --config webpack.config.js",
}

当我执行npm run build:

会发生什么?我知道Node 进程将在某处启动,webpack 二进制文件将被调用,对吧?但在那之前的步骤是什么?这是否取决于我使用的是 Windows、Linux、PowerShell 还是 Git bash?该过程与正在使用的操作系统和 CMD/CLI 有何关系?

【问题讨论】:

    标签: node.js powershell npm git-bash


    【解决方案1】:

    npm 源代码有助于将整个 run-script 功能分离到自己的模块和存储库中,因此如果 the documentation 没有回答您的问题,您可以 review the source code

    谈到你的问题:

    我知道某个地方会启动一个 Node 进程并调用 webpack 二进制文件,对吧?

    webpack 可执行文件将运行。由于webpack 是一个Node.js 脚本,它将与node 一起运行。

    但是,如果您的“构建”值包含 shell/CLI 命令,则将运行这些命令。不一定会调用 Node.js。

    但是在那之前的步骤是什么?

    “在此之前的步骤”包括可能还定义的某些生命周期脚本。特别是,如果有“prebuild”脚本,它将在“build”脚本之前运行。

    这取决于我使用的是 Windows、Linux、PowerShell 还是 Git bash?该过程与正在使用的操作系统和 CMD/CLI 有何关系?

    npm(和node)努力使 Windows 和 Linux 体验具有可比性。肯定会出现差异,但如果没有更多细节,我不确定我是否想推测您可能会对哪些细节感兴趣。

    Powershell 和 GitBash:同样,npm 将努力消除差异,但我确信它们会出现。要注意的一件事是您的PATH(和其他环境变量)可能设置不同,这可能会影响行为。 (如果您安装了多个版本,则可能会特别影响执行哪个版本的 node。)

    我不是 Windows 专家,但我见过很多 npm 脚本假定类似 UNIX 的环境。因此,如果给定选择并且所有其他条件都相同(从来都不是),类似 bash 的环境可能会更顺畅一些。

    【讨论】:

    • 谢谢。让我知道我是否做对了。这是正确的顺序吗? 1 - 您所在的 CLI(PowerShell、Bash 等)需要了解 npm 命令的路径。这可能是在您安装 Node 时设置的,对吗? 2 - 节点将评估脚本并决定做什么?启动 Node 进程或运行 shell/CLI 命令?如果有 shell/CLI 命令,将使用什么来运行这些命令?
    【解决方案2】:

    我正在寻找的答案是这样的:

    当您调用 npm run 时,npm 将启动一个 shell 来运行这些指令。

    npm 将使用哪个 shell 在你的 npm 设置中定义。

    你可以通过运行查看你的 npm 配置:

    >>> npm config ls
    

    在上面的示例中,npm 将在 git-bash 上运行脚本。

    你可以通过调用来改变 npm shell:

    npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"
    

    【讨论】:

      猜你喜欢
      • 2019-07-04
      • 2020-03-02
      • 2020-05-12
      • 2018-07-31
      • 2019-03-28
      • 2022-07-24
      • 2021-04-28
      • 2017-03-26
      • 1970-01-01
      相关资源
      最近更新 更多