← 返回首页

基于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 钩子即可。