背景
Commitlint git commit 格式校验工具。
安装
- 安装npm包
// 全局安装
npm install -g @commitlint/cli @commitlint/config-conventional
如果本地安装, 可以在packag.json 内配置项目的命令行 {"commitlint": "commitlint"}
- 新建配置文件
touch commitlint.config.js
// commitlint.config.js
module.exports = {
extends: ['@commitlint/config-conventional']
}
配置文件
默认读取根目录下commitlint.config.js 配置文件
指定配置文件
commitlint --config <file path>
使用测试
echo "xxx" | commitlint
配置项
- extends 继承外部配置文件或npm配置包
{
extends: [
// 使用本地共享配置文件
'./commitlint.local.js',
// 使用第三方npm包
'@commitlint/config-conventional',
// 以 `<scope>/commitlint-config` 格式的第三方包, 提供简写模式
'@coolcompany',
// commitlint-config-*
'lerna',
]
}
- parserPreset 解析器路径(必填)
{
parserPreset: 'conventional-changelog-atom',
}
- formatter 格式化工具(必填)
{
formatter: '@commitlint/format',
}
- rules 本地自定义规则, 优先级高于extends
{
'type-enum': [2, 'always', ['foo']]
}
- ignores 忽略函数, 帮助忽略某些不需要的提交信息
{
ignores: [(commit) => commit === ''],
}
- defaultIgnores 是否使用默认忽略配置
{
defaultIgnores: true
}
- helpUrl 帮助信息地址
- prompt 自定义提示信息
{
prompt: {
messages: {},
questions: {
type: {
description: 'please input type:',
},
},
},
}
自定义校验规则
规则格式
[规则名称]:[level, applicable, value]
- level 校验等级
- 0 禁用
- 1 警告
- 2 错误
- applicable 规则匹配模式
- always 正匹配
- nerver 反匹配
- value 参数值
规则可接收参数:
- 规则数组 Array
- 返回规则数组的函数 () => arry
- Promise规则数组 Promise《Array》
{
"rules":{
"header-max-length": [0, "always", 72],
"header-max-length": () => [0, "always", 72],
"header-max-length": async () => [0, "always", 72],
}
}
规则项
- header-case 单词格式, 例如: upper-case 全大写
- header-full-stop 结束符
- header-max-length header 最大长度
- header-min-length header 最小长度
- references-empty
- scope
- scope-enum scope 可选值, 例如 [ 'components', 'utils', 'cli' ]
- scope-case scope 单词格式
- scope-empty 是否为空
- scope-max-length scope最大内容长度
- scope-min-length scope最小内容长度
- subject
- subject-case subject 单词格式
- subject-empty subject 是否为空
- subject-full-stop subject 中止符
- subject-max-length subject 最大内容长度
- subject-min-length subject 最小内容长度
- subject-exclamation-mark 分割符
- type
- type-enum type 可选值 例如: [ 'feat', 'fix' ]
- type-case type 单词格式
- type-empty type是否为空
- type-max-length type最大内容长度
- type-min-length type最小内容长度
- signed-off-by
- trailer-exists
- body-full-stop body 结束符
- body-leading-blank body 开头空行
- body-empty body 是否为空
- body-max-length body最大内容长度
- body-max-line-length body最大内容行数
- body-min-length body最小内容长度
- body-case 单词格式 , 例如: upper-case 全大写
- footer-leading-blank footer 开头空行
- footer-empty footer是否为空
- footer-max-length footer最大内容长度
- footer-max-line-length footer最大内容行数
- footer-min-length footer最小内容长度
规则插件
规则插件为我们提供自定义规则校验个能力。
本地插件
{
rules: {
// 添加规则
'header-size-10': [2, 'always']
}
plugins: [
// 定义插件
{
rules:{
// 定义规则
'header-size-10': ({header}) => {
const pass = header.length > 10
const message = `header 长度不能超过10个字符`
return [pass, message]
}
}
}
]
Prompt 提示器
提示器类似 commitizen 提供commit 提示工具。
安装
- 包安装
npm i -D
// commitlint 命令行
@commitlint/cli
// 预设规则
@commitlint/config-conventional
// 提示信息命令行
@commitlint/prompt-cli
- 配置文件
// commitlint.config.js
module.exports = {extends: ['@commitlint/config-conventional']}
- package.json 设置
"scripts": {
"commit": "commit"
}
promt-cli 使用 @commitlint/prompt 包, 相关提示内置在prompt
setting.js, 如果需要自定义提示信息, 可以使用@commitlint/cz-commitlint
- 使用
git add *
npm run commit
commitizen 适配器
commitizen 作为 Prompt 的替代方案, 官方为他提供适配器 @commitlint/cz-commitlint,
安装
npm i -D @commitlint/cz-commitlnt
配置package.json
{
"scripts": {
"commit" : "git-cz"
},
"config": {
"commitizen": {
"path": "@commitlint/cz-commitlint"
}
}
}
该适配器主要有两部分组成:
- messages: 提示信息
- questions: 交互配置
修改适配器
通过 commitlint.config.json 配置文件自定义类型提示
为命令配置中文提示