当我运行npm build
命令时,会出现以下错误:
npm WARN build `npm build` called with no arguments
那么,npm run-script build
和npm build
有什么区别?
npm run-script
е’ҢдҪ•ж—¶дҪҝз”Ёnpm build
гҖӮиҝҷдёӘеӣһзӯ”并没жңүи®©жҲ‘жӣҙеҠ зҗҶи§ЈгҖӮ - user153923最佳答案在这篇SO文章中。
基本上...
npm run
== npm run-script
此外,某些常见任务被设为别名,因此以下等式成立...
npm test
== npm run-script test
npm build
== npm run-script build
对于常见任务,请使用...
npm start
npm build
npm test
npm restart
对于其他所有任务,请使用...
npm run <my-task>
npm build == npm run-script build
。我不确定你所说的 ==
是什么意思,但根据我的理解,这是不正确的。你的意思是什么? - Colm Bhandalnpm build
和npm run-script build
执行的是相同的操作,但现在情况已经不同了。 - undefinednpm build
是一个旧的 CLI 命令,在 CLI 的版本 6 之后,npm
将其停止暴露。"build"
是开发人员为构建项目选择的常用名称。开发人员在他们的 package.json
文件中定义它,并使用一些 npm run-script build
的变体运行它。如果这个用户定义的脚本没有在 package.json
中定义,npm
CLI 将抛出一个错误,就像当用户试图传递任何其他不存在的用户定义的脚本给 npm run-script
时一样。首先,我会尝试不走进兔子洞,但让我说一些事情。在撰写本文时,run
只是 run-script
的别名,同样的,rum
和 urn
也是如此。在本答案的其余部分中,我将只使用 run-script
,因为它似乎是这个命令的 "主" 名称(而不是别名)。但是在下面的任何用法中,如果你感觉奇怪,可以随意在你的脑海中将 run-script
替换为 run
、rum
或 urn
。
npm
是一个 CLI好的,接下来是什么?为了避免混淆,让我们分开考虑,并首先关注一般情况下 npm COMMAND
和 npm run-script SCRIPT
之间的区别。在这里,我只是使用 COMMAND
和 SCRIPT
分别表示某些任意命令/脚本。
首先,想一想 npm
是什么。它是一个 CLI 工具。就像你能想到的任何其他 CLI 工具一样,它有一些内置命令或 "动词"。例如,如果我们执行 npm ls
,我们可以看到已安装包的列表。这里,ls
是传递给 npm
的 COMMAND
或 "动词"。
npm run-script
command其中一个 npm
CLI 支持的命令/动词是 run-script
。这个特定的命令将会:
从一个包的 "scripts" 对象中[运行]任意命令。如果没有提供 "command",它将列出可用的脚本。
(来源)
因此,对于您在package.json
文件中定义的任何用户定义的SCRIPT
,可以使用npm
运行它,只需执行:
npm run-script SCRIPT
SCRIPT
几乎可以是任何您喜欢的东西*。这是用户定义的。您可以称之为build
,或者您可以称之为billy
或bilbo
。显然,您希望将其称为合理的名称。这就是为什么许多开发人员使用术语build
来构建他们的项目的原因。
*在SCRIPT
上有一些命名限制,因此它并非完全自由格式。请参见此处。
npm build
和npm run-script build
现在我们了解了npm
是一个CLI工具,我们终于可以解决npm build
的问题了。在这里,我们将build
作为动词传递给npm
CLI。这与将build
作为要使用npm run-script build
运行的自定义脚本的名称完全不同。
现在问题是,build
命令是否是npm
CLI的有效动词?答案是:这取决于您使用的npm
版本:
因此,在npm
CLI的版本6和可能更早版本中,npm build
才是有效的。
很可能NPM故意从其CLI中删除了build
命令以避免混淆。许多开发人员将build
用作package.json
中其中一个用户定义的脚本的名称,因此在npm
CLI中有另一个build
动词会导致两者混淆-因此会出现这样的问题。
npm build
和npm run-script build
确实不同,我在Docker Playground上测试了它们在各种Node/npm
版本上的表现。以下是结果:
Node 版本 | npm 版本 | npm build 的结果 |
npm run-script build 的结果 |
---|---|---|---|
node:10.0.0-slim |
npm@5.6.0 |
没有输出(命令似乎成功了,但似乎什么也没做) | npm ERR! missing script: build |
node:12.0.0 |
npm@6.9.0 |
没有输出(命令似乎成功了,但似乎什么也没做) | npm ERR! missing script: build |
node:18.6.0 |
npm@8.13.2 |
Unknown command: "build" (命令失败了) |
npm ERR! missing script: build |
在撰写本答案时,我发现npm
版本6文档中存在一个错误,像我们这样的许多困惑的人来到此处,错误地将npm build
与npm run-script build
混淆起来,增加了混淆。我已经提交了PR解决了这个问题,该PR已合并。希望它很快会反映在npm
文档中。
希望本答案中的链接能够保持有效一段时间,但如果失效,请留言告知。
npm run-script build
* - Datz