Husky 与 Commitlint 约定代码提交规范

437 阅读2分钟

HuskyCommitlint 是前端项目中常用的工具,用于约定和规范代码提交,确保代码提交信息符合团队的约定规范。以下是详细介绍及配置步骤。


Husky 与 Commitlint 的作用

  1. Husky

    • 用于在 Git 钩子(如 commit-msgpre-commitpre-push 等)上运行自定义脚本。
    • 主要用于触发代码质量检查、单元测试、提交规范检查等任务。
  2. Commitlint

    • 用于检查提交信息是否符合预定规范(如 Angular 提交规范)。
    • 通过结合 commit-msg 钩子检查每次提交的信息,避免提交不符合规范的记录。

常见提交规范

常见的提交信息格式:

<type>(<scope>): <subject>

# 示例
feat(user): add login feature
fix(auth): resolve token validation issue
  • type:提交的类型,如 feat(新功能)、fix(修复)、docs(文档)、style(代码格式)、test(测试)。
  • scope:可选,用于说明提交影响的范围(如模块或文件)。
  • subject:简要描述提交内容。

配置步骤

1. 安装依赖

使用 pnpm 安装 Husky 和 Commitlint 相关依赖:

pnpm install husky @commitlint/config-conventional @commitlint/cli --save-dev

2. 初始化 Husky

初始化 Husky,添加 Git 钩子支持:

pnpm husky install

为 Git 钩子添加 commit-msg

pnpm husky add .husky/commit-msg "pnpm commitlint --edit $1"

如果没有在.husky目录下生成commit-msg文件 可以手动新建一个commit-msg文件 文件内容如下

pnpm commitlint --edit "$1"

package.json中配置 Husky:

{
  "scripts": {
    "prepare": "husky install"
  }
}
  • 这一步确保每次npm installyarn时都会初始化 Husky。

3. 配置 Commitlint

创建 commitlint.config.js 文件,配置提交信息规范:

module.exports = {
  // 继承的规则
  extends: ["@commitlint/config-conventional"],
  // 定义规则类型
  rules: {
    // type 类型定义,表示 git 提交的 type 必须在以下类型范围内
    "type-enum": [
      2,
      "always",
      [
        "feat", // 新功能 feature
        "fix", // 修复 bug
        "docs", // 文档注释
        "style", // 代码格式(不影响代码运行的变动)
        "refactor", // 重构(既不增加新功能,也不是修复bug)
        "perf", // 性能优化
        "test", // 增加测试
        "chore", // 构建过程或辅助工具的变动
        "revert", // 回退
        "build", // 打包
      ],
    ],
    // subject 大小写不做校验
    "subject-case": [0],
  },
};

4. 验证提交信息

  • 提交时,Commitlint 会根据配置的规范检查提交信息。
  • 如果提交信息不符合规范,将返回错误,阻止提交。

完成的项目文件结构

.
├── .husky/
│   ├── commit-msg        # Commitlint 检查提交信息的钩子
│   ├── pre-commit        # 检查代码质量的钩子
├── commitlint.config.js  # Commitlint 配置文件
├── package.json

运行验证

  1. 提交信息不符合规范(如未包含 type),会提示错误并阻止提交:

    ⧗   input: update readme
    ✖   type must be one of [feat, fix, docs, style, refactor, test, chore]
    
  2. 提交符合规范的信息即可通过检查。


通过 HuskyCommitlint 的组合,可以保证提交信息规范化,为团队协作和版本管理带来更好的体验。