在项目中启用 commitlint

安装

eslint 一样的是, commitlint 自身只提供了检测的功能和一些最基础的规则,使用者需要根据这些规则配置出自己的规范。

对于 Conventional Commits 规范,社区已经整理好了 @commitlint/config-conventional 包,我们只需要安装并启用它就可以了。

首先安装 commitlint 以及 conventional 规范:

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

配置

接着创建 commitlint.config.js 或者 .commitlintrc.js 文件,并写入以下内容:

module.exports = {
  extends: ['@commitlint/config-conventional'],
  rules: {
    'body-leading-blank': [1, 'always'],
    'body-max-line-length': [2, 'always', 100],
    'footer-leading-blank': [1, 'always'],
    'footer-max-line-length': [2, 'always', 100],
    'header-max-length': [2, 'always', 100],
    'scope-case': [2, 'always', 'lower-case'],
    'subject-case': [2, 'never', ['sentence-case', 'start-case', 'pascal-case', 'upper-case']],
    'subject-empty': [2, 'never'],
    'subject-full-stop': [2, 'never', '.'],
    'type-case': [2, 'always', 'lower-case'],
    'type-empty': [2, 'never'],
    'type-enum': [
      2,
      'always',
      ['build', 'chore', 'ci', 'docs', 'feat', 'fix', 'perf', 'refactor', 'revert', 'style', 'test'],
    ],
  },
}

注意:rule 由 name 和配置数组组成,如:name: [0, 'always', 72],数组中第一位为 level ,可选0, 1, 20disable1warning2error ,第二位为应用与否,可选 always|never ,第三位该 rule 的值。

至此,commitlint 的配置就基本完成了,但目前我们还没有说何时来执行 commitlint

答案显而易见,在每次执行 git commit 的时候咯~

为了可以在每次 commit 时执行 commitlint 检查我们输入的 message,我们还需要用到一个工具 —— husky

husky 是一个增强的 git hook 工具。可以在 git hook 的各个阶段执行我们在 package.json 中配置好的 npm script

首先安装 husky

npm install --save-dev husky

接着在 package.json 中配置 commit-msg 脚本:

{
  "husky": {
    "hooks": {
      "commit-msg": "commitlint -E HUSKY_GIT_PARAMS",
      "pre-commit": "lint-staged"
    }
  }
}