`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 startnpm test
Pawel

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

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

20

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

npm run-script build

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

  • prepublishpublishpostpublish
  • preinstallinstallpostinstall
  • preuninstalluninstallpostuninstall
  • preversionversionpostversion
  • pretesttestposttest
  • prestopstoppoststop
  • prestartstartpoststart
  • prerestartrestartpostrestart
  • 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.