如何在“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,这应该在服务器端完成,它只能拒绝不符合的代码。

有可能这个问题会像你提到的那样被更好的解决,把它作为一个自定义的安装脚本,只是处理额外的通信开销。