“npm build”命令无法运行package.json中名为“build”的脚本。

161

我正在尝试在一个新的模块中使用npm build,而不需要 gulp/Grunt/其他专门的构建工具。

"scripts": {
  "build": "node build.js"
},

我的build.js非常简单

console.log('Hello')

然而,运行

npm build
Simply exits without printing anything, with a status of 0.
Running:
npm install

也可以执行所有正常操作,但不会运行 build.js。

我该如何让npm运行我的构建脚本?

编辑:即使是简单的bash命令似乎也无法工作,例如

"scripts": {
    "build": "touch TESTFILE"
},

没有以那个名称创建文件。


解决方法:使用 install 代替。 - Zaz
1
这基本上是NPM的一个巨大而不直观的烦恼,也是我继续使用Yarn的原因之一。使用yarn,我可以像参数一样运行任何自定义脚本,例如yarn storybook将运行storybook脚本。在NPM中,我必须执行npm run storybook,而且如果我希望通过npm传递任何参数,则需要在其前面加--,因此当比较yarn storybook --ci和npm run storybook -- --ci时,对我来说很明显选择yarn。 - Emobe
5个回答

281

不幸的是,npm build已经是一个内部命令,正如文档中所描述的那样:

这是由npm link和npm install调用的基础命令。 一般情况下不应该直接调用它。

由于该命令已经存在,它会始终遮盖您的"build": "node build.js"

运行自己的脚本的完全限定方式是使用run-script或其别名run

$ npm run build

npm start 和其他类似的方式是一种简写,但只有在现有的 npm 命令不与它重名时才可用,例如 npm build


出于纪念性的目的(正如其他人所提到的),npm build 是 npm 使用 node-gyp 构建本地 C/C++ Node 插件的命令。


2
有些软件包需要构建过程。当你运行 npm install 并且 npm 发现一个需要 C/C++ 绑定或者一般需要 node-gyp 运行的软件包时,它会开始执行 npm build。你可以通过简单地运行 npm build 来重新构建这些软件包。 - Jakub Miziołek
5
内部命令应该更名为 _build,而 npm build 应该成为像 npm startnpm test 那样的快捷方式。 - Pawel
1
我知道 npm build 不会调用我的脚本,而且它是用来构建包的编译组件的。但我仍然不确定它是如何进行的:它查找哪些文件等等? - aaaidan
当然,这是有道理的,直到你查看文档参考并看到“start”也被列出来。但是,如果我从package.json中删除我的“start”脚本,它就不知道该怎么做了。 - grantwparks
1
如果我要自己编写一个包,了解如何填充“npm build”才有意义... - Frank N
文档链接已损坏。 - Colm Bhandal

21

"build" 的脚本在 package.json 中没有特殊之处。运行它的唯一方法是调用:

npm run-script build

有一些名称由npm自动调用,但"build"不是其中之一。完整列表如下:

  • prepublishpublishpostpublish
  • preinstallinstallpostinstall
  • preuninstalluninstallpostuninstall
  • preversionversionpostversion
  • pretesttestposttest
  • prestopstoppoststop
  • prestartstartpoststart
  • prerestartrestartpostrestart
  • 对于自定义脚本名称,可以使用preCUSTOMpostCUSTOM

5

好的,要单独运行构建,请使用:

npm run-script build

1
仅限于“它自己”。http://www.its-not-its.info/ - colin moock
@colinmoock 谢谢!我妈妈是一名英语老师,她会感到羞耻的:D。已更正! - mikemaccana

2

Npm build 希望在其根目录下包含一个 package.json 文件的文件夹。

尝试在您的 package.json 中使用 npm scripts,比如经典的 npm start。


这意味着 npm build . 应该可以运行,而在我的情况下,npm确实按照我希望的执行了"package.json"中的 "build" 脚本。 - Erhhung

2

我遇到了一个问题,就是npm run build没有打印任何东西。最终我使用npm run build --verbose来获得所需的输出。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接