`npm build`不会在package.json中运行名为“ build”的脚本


138

对于新模块,我试图在npm build没有gulp / Grunt /其他专用构建工具的情况下使用。

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

我的build.js很简单

console.log('Hello')

但是,跑步

npm build

仅退出而不打印任何内容,状态为0。

运行:

npm install

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

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

编辑:即使简单的bash命令似乎也不起作用,例如

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

不使用该名称创建文件。


解决方法:install改为使用。
— Zaz

这基本上是NPM的一个巨大而直观的烦恼,这也是我继续使用Yarn的原因之一。使用yarn,我可以运行任何自定义脚本,就像将其作为参数一样,即yarn storybook将运行Storybook脚本。在NPM中,我必须执行npm run故事书,最重要的是,如果我希望通过npm传递任何参数,则需要-在此之前,因此在将yarn故事书-ci与npm run故事书---ci进行比较时,对我来说,这很容易。
— Emobe

Answers:


243

不幸的npm build是,已经是内部命令,如docs中所述:

这是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插件。由于通常会自动进行记录,因此记录得不好,但是如果您有兴趣,可以在此处找到源代码。


15
那么,什么不 npm build呢?据我所知,它使所有文件完全不变...
— qntm

2
有些软件包需要构建过程。当您运行时npm install,npm找到具有C / C ++绑定或通常需要node-gyp才能运行的软件包,然后它将启动npm build。您可以npm build仅通过单独运行来重建那些软件包。
— 雅各布·米齐奥洛克(JakubMiziołek),

4
内部命令应重命名为,_build并且npm build应为快捷方式,例如npm start和npm test
— Pawel

1
我知道这npm build不会调用我的脚本,它用于构建程序包的已编译组件。我仍然不确定这样做的过程:它寻找什么文件,等等?
— aaaidan

1
如果我要自己写一个程序包,那还是很高兴知道,该怎么做才能充满npm build意义……
— Frank Nocke

20

package.json在任何情况下,名为“ build”的脚本都不是特殊的。使其运行的唯一方法是调用:

npm run-script build

有一些名称会被npm自动调用,但是“ build”不是其中之一。完整列表是:

  • prepublish,publish,postpublish
  • preinstall,install,postinstall
  • preuninstall,uninstall,postuninstall
  • preversion,version,postversion
  • pretest,test,posttest
  • prestop,stop,poststop
  • prestart,start,poststart
  • prerestart,restart,postrestart
  • preCUSTOM以及postCUSTOM自定义脚本名称。


3

我npm run build不打印任何东西时遇到问题。最终npm run build --verbose用来获取我需要的输出。


2

Npm构建期望

根目录中包含package.json文件的文件夹

尝试在package.json中使用npm脚本,例如经典的npm start


这意味着npm build .应该可以正常工作,就我而言,npm确实按照我希望的那样在我的“ package.json”中执行了“ build”脚本。
— 雄
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.