如何在“npm install”上安装git钩子?
当有人安装my-package
时候,我想安装一个pre-commit
git钩子(即丢掉代码)。
我试图添加一个postinstall
脚本:
"scripts": { "postinstall": "./scripts/install-git-hooks" }
这很好。 当有人运行npm install
,他们会得到pre-commit
安装钩子。
但是,如果another-package
依赖于my-package
,则为another-package
运行npm install
也会运行postinstall
脚本,这是不希望的。
什么是最干净的方法来避免这种不良影响?
您可以使用ghooks npm模块并将其添加为dev-dependency。 你可以在你的package.json提交之前configuration要运行的东西,如下所示:
[...] "config": { "ghooks": { "pre-commit": "npm test" } } [...]
哈克,但可能会为你工作。
诀窍是(在脚本中)标识它是否是NPM安装的子依赖项或根相关性。 只要检查../../package.json
存在。 如果是这样,这是一个子依赖项,你应该跳过安装钩子。
应该指出的是,你打破了任何一致的安装规则,这完全违背了安装脚本的精神。 这是为了安装不能被任何方式信任的客户端钩子,如果你需要执行linting,这应该在服务器端完成,它只能拒绝不符合的代码。
有可能这个问题会像你提到的那样被更好的解决,把它作为一个自定义的安装脚本,只是处理额外的通信开销。