Husky pre-commit钩子未触发,ESLint违规时仍可提交代码如何解决?
问题根因及解决方案
核心原因
- 你使用的husky v7.0.1已完全废弃
package.json中husky.hooks的配置方式,该写法仅适用于husky v4及更早版本,你当前写的钩子配置根本不会被husky读取生效 - 手动重命名
.git/hooks/pre-commit.sample的操作不符合husky v7的设计逻辑,husky v7默认使用项目根目录下.husky文件夹管理钩子,不会读取.git/hooks下的自定义钩子 - 你手动创建的
.git/hooks/pre-commit没有对应执行校验逻辑,自然不会拦截违规提交
修复步骤
首先执行初始化husky命令:
npx husky install给package.json的scripts新增prepare脚本,保证后续安装依赖时自动初始化husky:
"scripts": { "prepare": "husky install", "prettier-format": "prettier --config .prettierrc 'src/**/*.ts' 'test/**/*.ts' --write", "lint": "eslint . --ext .ts" }
执行命令添加pre-commit钩子,自动生成对应配置文件:
npx husky add .husky/pre-commit "npm run prettier-format && npm run lint"可选优化:
- 如果希望prettier格式化后的代码自动加入提交,可以修改
.husky/pre-commit文件内容如下:
也可以搭配npm run prettier-format git add . npm run lintlint-staged只处理暂存区文件,提升校验速度。 - 如果需要eslint警告级别违规也拦截提交,可修改lint命令为:
"lint": "eslint . --ext .ts --max-warnings 0"
- 如果希望prettier格式化后的代码自动加入提交,可以修改
清理冗余文件:删除你之前手动创建的
.git/hooks/pre-commit,避免钩子冲突。
验证方式
故意编写不符合eslint规则的代码,执行git commit操作,此时会触发pre-commit钩子,eslint校验不通过时会返回非0退出码,自动阻止提交。
内容的提问来源于stack exchange,提问作者sage
相关产品推荐
相关产品推荐

