来自 shell 的 运行 'npm install' 也运行 'prepublish' 脚本

running 'npm install' from shell also runs the 'prepublish' script

这是一个 SSCCE。 给定以下 package.json 文件:

{
  "name": "foo",
  "version": "1.0.0",
  "description": "",
  "scripts": {
      "prepublish": "echo \"pre-publish script called\""
  },
  "devDependencies": {
  },
  "dependencies": {
    "lodash": "^4.10.0"
  }
}

运行:来自 shell 的 npm install,导致 prepublish 脚本也被执行:

$ npm install

> foo@1.0.0 prepublish /tmp/so
> echo "pre-publish script called"

pre-publish script called
npm WARN foo@1.0.0 No description
npm WARN foo@1.0.0 No repository field.
npm WARN foo@1.0.0 No license field.

如果 prepublish 脚本重命名为例如prepublis 它不再与 npm install 一起执行。问题是,我需要 prepublish 脚本,因为我通常会在发布到 npm 之前执行静态类型分析和 Mocha 测试。

这是错误还是功能?我该如何解决?当我只想安装 package.json 依赖项时,应该不需要 运行 我的 Mocha 测试。

我的环境是:

$ npm --version && node --version
3.9.5
v6.2.2

正如我所说,这不是错误(尽管每个人都希望修复此功能),但有一个解决方案。查看 https://www.npmjs.com/package/in-publish 以帮助解决这种情况。

解决方案总结

(来自发布中的包页面)

 npm install --save in-publish

然后在package.json:

  "scripts": {
    "prepublish": "in-publish && thing-I-dont-want-on-dev-install || not-in-publish"
  }

您也可以使用 not-in-installin-install 代替 in-publish

  "scripts": {
    "prepublish": "not-in-install && thing-I-dont-want-on-dev-install || in-install"
  }