哈士奇预提交挂钩未触发

Posted

技术标签:

【中文标题】哈士奇预提交挂钩未触发【英文标题】:husky pre-commit hook not triggering 【发布时间】:2021-10-04 22:36:59 【问题描述】:

我遇到了husky 的问题。我希望 husky 在即将完成 git commit 时运行 eslint 并且更漂亮,以便它可以强制执行干净的编码检查。我已经设置了eslintprettier 并集成了两者。手动使用时它们工作正常。但是,如果违反了 eslint 规则之一,则 husky 允许提交。

我还将本地项目的.git/hooks 目录中的pre-commit.sample 文件重命名为pre-commit

这是我的package.json 文件:

  "scripts": 
    "prettier-format": "prettier --config .prettierrc 'src/**/*.ts' 'test/**/*.ts' --write",
    "lint": "eslint . --ext .ts"
  ,
  "husky": 
    "hooks": 
      "pre-commit": "npm run prettier-format && npm run lint"
    
  ,
  "devDependencies": 
    "husky": "^7.0.1"
  

请问,这可能是什么问题? 非常感谢。

【问题讨论】:

【参考方案1】:

我找到了一种更简单的方法来做到这一点,而无需自己开始安装 husky。

我通过运行以下命令安装了 lint-staged 并测试了由它设置的 husky 预提交钩子:

npx mrm@2 lint-staged
yarn install

第一行安装 lint-staged 和 husky 并在目标 package.json 文件中添加带有示例脚本的正确部分供您使用或修改。

暂存并提交目标 package.json 到 git(本地 git 就足够了)。做出应该导致 eslint 发现错误和提交失败的更改。再次尝试提交以测试 lint-staged 设置。 Lint-staged 应该会阻止文件这次被提交。

【讨论】:

【参考方案2】:

我认为要使其与husky v7 一起使用,您需要将要运行预提交的内容移动到一个名为.husky/pre-commit 的文件中。 husky v7 不会使用您的 package.json 中的配置。见here for upgrading from v4 to v7。

【讨论】:

您好,我会检查一下,让您知道结果。非常感谢 非常感谢@Rin 的回答。但是,发生了很多变化,我没有完成该项目的 husky 设置,然后才开始做其他事情。最近,我不得不在一个 javascript 项目上工作,我在其中进行了项目设置,并且不得不再次这样做。我发现了另一种我认为更简单的方法,它不需要添加我想在.husky/pre-commit 中运行的命令。我使用了 lint-staged。我将在下面详细描述这种方法。 :)

以上是关于哈士奇预提交挂钩未触发的主要内容,如果未能解决你的问题,请参考以下文章

与 lint-staged 一起使用时,预提交规则失败

“测试”的 husky 预提交钩子未完成

Git 预提交挂钩未在 Windows 上运行

Perforce客户端预提交挂钩

设置预提交挂钩 jshint

哈士奇的工作原理是啥?