如何在 "npm install" 上安装 git 挂钩?

How to install git hooks on "npm install"?

我想在有人安装 my-package.

时安装一个 pre-commit git 挂钩(检查代码)

我尝试添加一个 postinstall 脚本:

"scripts": {
  "postinstall": "./scripts/install-git-hooks"
}

效果很好。当有人运行 npm install 时,他们会安装 pre-commit 挂钩。

但是,如果 another-package 依赖于 my-package,运行 npm install for another-package 也会运行 postinstall 脚本,即不受欢迎。

避免这种不良影响的最干净的方法是什么?

Hacky,但可能适合你。

诀窍是(在脚本中)识别它是 NPM 安装的子依赖项还是根依赖项。只需检查 ../../package.json 是否存在。如果是这样,它是一个子依赖项,你应该跳过安装钩子。

请注意,您违反了任何一致的安装规则,这完全违背了安装脚本的精神。这是为了安装无法以任何方式信任的客户端挂钩,如果您需要执行 linting,这应该在服务器端完成,它可以拒绝不符合要求的代码。

这个问题可能会像您提到的那样得到更好的解决,方法是将其作为自定义安装脚本,并且只处理额外的通信开销。

您可以使用 ghooks npm 模块并将其添加为开发依赖项。您可以在 package.json 提交之前配置要 运行 的内容,如下所示:

[...]
"config": {
    "ghooks": {
        "pre-commit": "npm test"
    }
}
[...]