如何在 "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"
}
}
[...]
我想在有人安装 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"
}
}
[...]