提问者:小点点

当您调用`NPM run`来运行NPM脚本时,会发生什么?


我想知道更多关于NPM脚本是如何工作的。

例如:

package.json

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

执行NPM运行生成时:

会发生什么?我知道某个地方会启动一个节点进程,并调用webpack二进制文件,对吗?但在此之前的步骤是什么?这是否取决于我使用的是Windows,Linux,PowerShell还是Git Bash?这个过程与操作系统和正在使用的CMD/CLI有什么关系?


共1个答案

匿名用户

npm源代码将整个run-script功能分离到它自己的模块和存储库中,这样,如果文档不能回答您的问题,您就可以查看源代码。

说到你的问题:

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

将运行WebPack可执行文件。由于webpack是一个node.js脚本,因此它将使用node运行。

但是,如果您的“build”值由shell/CLI命令组成,那么将运行这些命令。不一定要调用Node.js。

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

“在此之前的步骤”包括可能也被定义的某些生命周期脚本。特别是,如果存在“预构建”脚本,它将在“构建”脚本之前运行。

这取决于我使用的是Windows,Linux,PowerShell还是Git Bash?这个过程与操作系统和正在使用的CMD/CLI有什么关系?

npm(和node)努力使Windows和Linux的体验具有可比性。分歧是肯定存在的,但如果没有更多的细节,我不确定我会想要推测哪些细节可能是你感兴趣的。

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

我不是一个Windows专家,但我看到了很多假定类似UNIX环境的npm脚本。因此,如果给出选择并且其他一切都是平等的(这从来都不是),一个类似bash的环境可能会更平稳一些。