基于Husky的Git提交规范实践
2026年4月25日 #husky #git
安装 Husky及相关依赖(现代写法)
npm install --save-dev @commitlint/cli @commitlint/config-conventional husky lint-staged
初始化:
npx husky init
生成: .husky/ 目录。
配置 commitlint
创建 Commitlint 配置文件 ,指定校验规则,让它遵循 Conventional Commits 规范:
在项目根目录创建 commitlint.config.js 文件; 写入以下配置(固定格式,可直接复制):
// commitlint.config.js
module.exports = {
// 继承官方的Conventional Commits规范
extends: ['@commitlint/config-conventional'],
// 自定义校验规则(可选,根据团队需求调整)
rules: {
// type的枚举值,和Conventional Commits规范一致,可新增自定义type
'type-enum': [
2, // 2表示错误级别(0=禁用,1=警告,2=错误)
'always', // always表示必须满足
[
'feat', // ✨ 新功能
'fix', // 🐛 修复 Bug
'docs', // 📝 文档修改
'style', // 💄 样式/格式调整(不改逻辑)
'refactor', // ♻️ 重构代码
'perf', // ⚡ 性能优化
'test', // ✅ 测试相关
'build', // 📦 打包构建
'ci', // 👷 CI/CD配置
'chore', // 🔧 杂项维护
'revert' // ⏪ 回滚提交
]
],
// type不能为空
'type-empty': [2, 'never'],
// description不能为空
'subject-empty': [2, 'never'],
// description首字母小写
'subject-case': [2, 'never', ['start-case', 'pascal-case', 'upper-case']],
// body和description之间要有空行
'body-leading-blank': [1, 'always'],
// footer和body之间要有空行
'footer-leading-blank': [1, 'always']
}
};
配置 lint-staged
package.json:
{
"lint-staged": {
"*.{js,ts,vue}": [
"eslint --fix",
"prettier --write"
]
}
}
提交前校验
npx lint-staged
提交信息校验
npx --no-install commitlint --edit "$1"
说明: @commitlint/config-conventional:内置了 Conventional Commits 规范的校验规则,无需自己编写; 如果项目不需要 Prettier,可删除 prettier --write 命令,只保留 eslint --fix; 如果只需要校验Commit信息,不需要代码校验,可跳过此步骤,删除 pre-commit 钩子即可。