1. 安装依赖

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

2. 启用 Husky

npx husky install
npm pkg set scripts.prepare="husky install"  # 自动初始化钩子

3. 配置提交信息规范

(1) 创建 .commitlintrc.js
module.exports = {
  extends: ['@commitlint/config-conventional'], // 使用 Angular 提交规范
  rules: {
    'type-enum': [ // 限定提交类型
      2,
      'always',
      ['feat', 'fix', 'docs', 'style', 'refactor', 'test', 'chore', 'revert']
    ],
    'subject-case': [0] // 不限制主题大小写
  }
};
(2) 添加 commit-msg 钩子,下面的命令就是先创建.husky/commit-msg文件,然后在commit-msg里添加npx --no-install commitlint --edit "$1"这一行代码,如果用下面的代码添加不成功,可以手动添加
npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'

4. 提交示例

允许的提交格式:
git commit -m "feat: 添加登录功能"      # 新增功能
git commit -m "fix: 修复按钮点击问题"  # 修复 Bug
git commit -m "docs: 更新 README"      # 文档变更
被拦截的提交格式:
git commit -m "随便写个提交"  # 错误:缺少类型前缀
git commit -m "fix:abc"      # 错误:类型后缺少空格和描述

npx --no-install commitlint --edit "$1"这个命令是啥意思

这个命令是 Git 提交信息(commit message)的校验命令,通常用于在 git commit 时强制检查提交信息是否符合团队约定的规范(比如 Angular 规范、Conventional Commits 规范等),核心作用是保证提交信息的一致性和可读性。

我们拆解每个部分来理解:

1. 核心命令:commitlint

  • commitlint 是一个专门用于 校验 Git 提交信息格式 的工具(需提前在项目中配置规则)。
  • 它会检查提交信息的结构(比如是否包含 type(scope): subject 格式,如 feat(login): 新增验证码登录功能)、关键词合法性(如 type 必须是 feat/fix/docs 等允许值)、长度限制等。
  • 若提交信息不符合规则,commitlint 会报错,阻止本次提交。

2. 前置参数:npx --no-install

  • npx:Node.js 自带的包执行工具,用于直接运行项目依赖中的命令(无需全局安装)。
    • 这里的 commitlint 是项目的局部依赖(需提前通过 npm install commitlint --save-dev 安装到项目中),npx 会自动找到项目 node_modules/.bin 下的 commitlint 执行。
  • --no-install:关键参数,意思是「不自动安装缺失的依赖」。
    • 若项目中没安装 commitlint,执行此命令会直接报错(而不是自动下载安装),避免意外安装不兼容版本或冗余依赖。

3. 命令参数:--edit "$1"

  • --editcommitlint 的核心参数,意思是「读取并校验指定文件中的提交信息」。
  • "$1":Shell 脚本中的位置参数,表示「第一个传入脚本的参数」。
    • 在 Git 钩子场景中(通常是 commit-msg 钩子),$1 会被 Git 自动填充为「临时存储提交信息的文件路径」(比如 .git/COMMIT_EDITMSG)。
    • commitlint 会读取这个文件的内容(也就是你输入的 git commit -m "xxx" 中的 xxx),然后按配置规则校验。

完整使用场景(关键!)

这个命令几乎不会手动执行,而是配置在 Git 的 commit-msg 钩子中,实现「提交前自动校验」:

  1. 你执行 git commit -m "新增功能"(不符合规范);
  2. Git 触发 commit-msg 钩子,自动调用该命令,将你的提交信息传入 commitlint
  3. commitlint 校验失败,输出错误(比如提示「缺少合法的 type」),并终止提交;
  4. 你必须修改提交信息为符合规范的格式(如 feat: 新增用户列表查询功能),才能提交成功。

依赖条件

要让这个命令生效,项目中必须:

  1. 安装 commitlint(局部依赖):npm install commitlint --save-dev
  2. 配置校验规则(比如用 Angular 规范):
    • 安装规则包:npm install @commitlint/config-conventional --save-dev
    • 新建配置文件(如 .commitlintrc.js),指定规则:

      js

      module.exports = {
        extends: ['@commitlint/config-conventional'] // 启用 Conventional Commits 规范
      };
      
  3. 配置 Git 钩子(通常用 husky 工具),将该命令绑定到 commit-msg 钩子。

总结

这个命令的本质是:通过 npx 执行项目局部的 commitlint 工具,读取 Git 提交信息的临时文件,校验其是否符合配置规则,从而强制规范提交信息。核心目的是让团队的 Git 提交记录清晰、统一,便于后续代码审查、版本发布和 CHANGELOG 自动生成。

更多推荐