Husky commit-message钩子未触发,commitlint无法校验提交信息
问题分析与解决方案
可能原因及对应修复方式
1. Commitlint配置文件格式不兼容
你当前使用ES模块格式的export default,但Husky钩子运行的Node环境默认采用CommonJS模块规范,这会导致commitlint无法读取配置文件,直接跳过校验流程。
修复:
将commitlint.config.js改为CommonJS格式:
module.exports = { extends: ["@commitlint/config-conventional"] };
2. Husky钩子脚本写法不规范
手动编写的commit-msg脚本存在参数传递或环境上下文问题,比如未引入Husky的环境脚本,或是pnpx执行路径异常,导致commitlint未被正确调用。
修复:
替换commit-msg脚本内容为官方推荐写法:
#!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" npx --no-install commitlint --edit "$1"
--edit "$1"是commitlint专门处理Git提交信息临时文件的参数,比直接传入文件路径更可靠- 引入
husky.sh确保钩子在正确的项目环境中运行 --no-install避免pnpx重复下载依赖,提升执行效率
3. 钩子文件缺少执行权限
手动创建的.husky/commit-msg文件可能未设置执行权限,导致Git无法触发该钩子。
修复:
在终端执行命令赋予执行权限:
chmod +x .husky/commit-msg
4. Husky初始化不完整
若手动创建钩子文件而非通过Husky命令添加,可能缺失必要的环境配置。
修复:
通过Husky命令重新添加commit-msg钩子:
npx husky add .husky/commit-msg 'npx commitlint --edit "$1"'
验证方法
可以在commit-msg脚本中添加日志输出,确认钩子是否正常触发:
#!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" echo "Commitlint triggered, checking file: $1" >> ./commitlint-hook.log npx --no-install commitlint --edit "$1"
提交后查看项目根目录下的commitlint-hook.log,若有内容说明钩子已触发,再根据日志排查commitlint的执行问题。
内容的提问来源于stack exchange,提问作者Ethan
相关产品推荐
相关产品推荐

