当有人安装my-package
时,我想安装一个postinstall
git hook(提示代码)。
我尝试添加"scripts": {
"postinstall": "./scripts/install-git-hooks"
}
脚本:
npm install
这很有效。当有人运行pre-commit
时,他们会安装another-package
挂钩。
但是,如果my-package
取决于npm install
,则为another-package
运行postinstall
也会运行accumarray
脚本,这是不受欢迎的。
避免这种不良影响的最简洁方法是什么?
答案 0 :(得分:6)
您可以使用http://php.net/manual/en/function.sprintf.php npm模块并将其添加为dev-dependency。您可以在package.json中配置提交之前运行的内容,如下所示:
[...]
"config": {
"ghooks": {
"pre-commit": "npm test"
}
}
[...]
答案 1 :(得分:4)
Hacky,但可能适合你。
诀窍是识别(在脚本中)它是否是NPM安装的子依赖项或根依赖项。只需检查../../package.json
是否存在。如果是这样,它是一个子依赖,你应该跳过安装钩子。
应该注意的是,您违反了任何一致的安装规则,这完全违背了安装脚本的精神。这是为了安装客户端钩子,如果你需要强制执行linted,那么这个挂钩是不可信任的,这应该在服务器端完成,它只能拒绝不符合的代码。
这个问题可能会像你提到的那样更好地解决,将其作为自定义安装脚本,并处理额外的通信开销。