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

mik*_*ana 127 javascript build node.js npm

对于一个新模块,我试图使用npm build没有gulp/Grunt /其他专门的构建工具.

"scripts": {
  "build": "node build.js"
},
Run Code Online (Sandbox Code Playgroud)

我的build.js很简单

console.log('Hello')
Run Code Online (Sandbox Code Playgroud)

但是,跑步

npm build
Run Code Online (Sandbox Code Playgroud)

只需退出而不打印任何内容,状态为0.

运行:

npm install
Run Code Online (Sandbox Code Playgroud)

也做所有正常的事情,但也不运行build.js.

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

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

"scripts": {
    "build": "touch TESTFILE"
},
Run Code Online (Sandbox Code Playgroud)

不创建具有该名称的文件.

jay*_*lps 226

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

这是由npm link和npm install调用的管道命令. 通常不应该直接调用它.

因为该命令已经存在,所以它总是会遮挡你的命令"build": "node build.js".

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

$ npm run build
Run Code Online (Sandbox Code Playgroud)

npm start和其他人是简单的方法,但只有当现有的npm命令不影响它时才是一个选项,就像npm build这样.


对于后代(正如其他人提到的那样)npm build,npm使用node- gyp来构建本机C/C++节点插件.它没有很好地记录,因为它通常是自动发生的,但是如果你感兴趣的话,源代码就在这里.

  • 那么*`npm build`做什么呢?据我所知,它使所有文件完全不变...... (14认同)
  • 内部命令应该重命名为`_build`和`npm build`应该像`npm start`和`npm test`这样的快捷方式 (4认同)
  • 有些包需要构建过程.当您运行`npm install`并且npm找到一个包含C/C++绑定的包或者通常需要运行node-gyp的包时,它会启动`npm build`.您可以通过单独运行`npm build`来重建这些包. (2认同)

Fli*_*imm 18

名为"build"的脚本package.json在任何方面都不是特殊的.让它运行的唯一方法是调用:

npm run-script build
Run Code Online (Sandbox Code Playgroud)

有些名称由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自定义脚本名称.


mik*_*ana 5

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

npm run-script build
Run Code Online (Sandbox Code Playgroud)