Husky v4.3.8 pre-commit钩子未触发问题求助
Husky钩子未完成安装
Husky v4依赖自动在.git/hooks目录生成钩子脚本,如果安装过程中断或之前卸载过Husky,可能导致该目录下的pre-commit文件缺失或无效。可以手动触发钩子安装:执行npx husky install,然后检查.git/hooks/pre-commit文件是否存在,Linux/macOS环境下还需确保文件具备可执行权限(可执行chmod +x .git/hooks/pre-commit)。Git钩子路径被篡改
若Git的core.hooksPath配置被修改为非默认的.git/hooks,Husky的钩子会无法被Git识别。执行git config core.hooksPath查看当前路径,若输出不是.git/hooks,执行git config core.hooksPath .git/hooks恢复默认路径。package.json配置存在语法错误
检查你的配置中多余的逗号:比如"pre-commit": "lint-staged",末尾的逗号(如果是hooks对象的最后一个属性)会导致JSON解析失败,Husky无法读取配置。修正后的配置应为:"lint-staged": { "*": "yarn run typecheck" }, "husky": { "hooks": { "pre-commit": "lint-staged" } }依赖冲突或安装不完整
项目中可能存在多版本Husky,或依赖安装异常。删除node_modules和yarn.lock文件,重新执行yarn install,确保Husky v4.3.8被正确安装到项目中。Git暂存区无待提交文件
lint-staged默认仅检查暂存区的文件,若当前没有任何文件被暂存(git status显示无变更),pre-commit钩子执行时lint-staged不会有任何输出,看起来像是钩子没触发。可以修改一个文件并执行git add后再尝试commit。添加日志排查执行情况
在husky的pre-commit钩子中添加--verbose参数,修改配置为:"husky": { "hooks": { "pre-commit": "lint-staged --verbose" } }再次执行commit,若终端有lint-staged的日志输出,说明钩子已触发,问题出在typecheck的执行逻辑;若无任何输出,说明钩子未被Git调用。
内容的提问来源于stack exchange,提问作者hardworkingprogrammer

