node.js - 当你调用 `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 有何关系?
解决方案
源代码有助于将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 的环境可能会更顺畅一些。