【问题标题】:running 'npm install' from shell also runs the 'prepublish' script从 shell 运行“npm install”也会运行“prepublish”脚本
【发布时间】:2017-01-13 19:47:21
【问题描述】:

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

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

运行:npm install 从 shell,导致 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

【问题讨论】:

标签: node.js npm package.json


【解决方案1】:

正如我所说,这不是错误(尽管每个人都希望修复此功能),但有一个解决方案。查看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"
  }

【讨论】:

  • 是的,有效。但是,我使用了npm i --D in-publish(我认为 in-publish 应该只是开发时间依赖项)。
猜你喜欢
  • 2016-04-08
  • 2017-03-10
  • 1970-01-01
  • 2022-11-20
  • 1970-01-01
  • 2017-09-09
  • 2017-05-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多