来自 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-install
和 in-install
代替 in-publish
"scripts": {
"prepublish": "not-in-install && thing-I-dont-want-on-dev-install || in-install"
}
这是一个 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-install
和 in-install
代替 in-publish
"scripts": {
"prepublish": "not-in-install && thing-I-dont-want-on-dev-install || in-install"
}