【问题标题】:How to install git hooks on "npm install"?如何在“npm install”上安装 git hooks?
【发布时间】:2016-05-31 15:44:38
【问题描述】:

当有人安装 my-package 时,我想安装一个 pre-commit git 挂钩(对代码进行 lints)。

我尝试添加一个postinstall 脚本:

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

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

但是,如果another-package 依赖于my-package,则为another-package 运行npm install 也会运行postinstall 脚本,这是不希望的。

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

【问题讨论】:

  • 这看起来像是一个 XY 问题。您在询问 Y,但要获得对大局有用的答案,您应该向我们提供有关 X 的信息。为什么您的包首先要安装 git hooks?
  • @Louis 我想强制用户在提交之前对他们的代码进行 lint。我可以引导用户在运行npm install 后运行npm run install-git-hooks,但我想自动执行此操作。
  • 公平地说,大多数 npm 包都有一些需要在项目上运行的安装后例程,你是否手动执行。打字,jspm,茉莉花......等等等等。

标签: node.js git npm githooks npm-install


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    Hacky,但可能对你有用。

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

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

    像您提到的那样,通过将其作为自定义安装脚本并仅处理额外的通信开销,可能会更好地解决此问题。

    【讨论】:

      猜你喜欢
      • 2012-12-30
      • 2012-04-01
      • 1970-01-01
      • 2015-12-24
      • 2017-12-05
      • 1970-01-01
      • 2019-05-02
      • 1970-01-01
      • 2014-06-13
      相关资源
      最近更新 更多