首页 > 解决方案 > 当你调用 `npm run` 来运行 NPM 脚本时,幕后会发生什么?

问题描述

我想了解更多关于 NPM 脚本如何工作的信息。

例如:

包.json

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

当我执行npm run build

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

标签: node.jspowershellnpmgit-bash

解决方案


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

说到你的问题:

我知道 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 的环境可能会更顺畅一些。


推荐阅读