网上介绍新版husky的文章太少了,这里记录一下
安装
最简单的,只需要这两个东西就行了
npm install --save-dev husky @commitlint/cli
网上其他文章,把很多杂七杂八的依赖包搅在一起,很烦
配置
配置也很简单,网上其他文章长篇大论的,整得很复杂一样
第一步:初始化husky
npx husky install
第二步:添加git提交的hook
npx husky add .husky/commit-msg 'npx --no -- commitlint --edit $1'
第三步:在项目根目录新建commitlint的配置文件commitlint.config.js
module.exports = {
extends: ['@commitlint/config-conventional'],
rules: {
'type-case': [2, 'always', ['lower-case', 'upper-case']],
'type-enum': [2, 'always',['feat', 'fix', 'docs','style','refactor','perf','test', 'chore', 'revert']]
}
}
至此,所有的配置就完成了
验证一下
输入
git commit -m "错误测试"
git返回
✖ subject may not be empty [subject-empty]
✖ type may not be empty [type-empty]
✖ found 2 problems, 0 warnings
ⓘ Get help: https://github.com/conventional-changelog/commitlint/#what-is-commitlint
husky - commit-msg hook exited with code 1 (error)
可以看见,规范已经生效了,这个"错误测试"没提供type
和subject
最后再补充两个附加信息,提交信息和配置文件的解释,用的时候来我这篇文章查一查就行了哦~
附1:git commit完整的规范
提交格式:
<type>(<scope>): <subject>
1. type 为必填项,用于指定 commit 的类型
- build : 更改构建系统和外部依赖项(如将 gulp 改为 webpack,更新某个 npm 包)
- ci : 对 CI 配置文件和脚本的更改
- docs : 仅仅修改文档说明
- feat : 增加一个新特性
- fix : 修复一个 bug
- perf : 更改代码以提高性能
- refactor : 代码重构时使用
- style : 不影响代码含义的改动,例如去掉空格、改变缩进、增删分号
- test : 增加新的测试功能或更改原有的测试模块
- 其他自定义类型:在配置文件新增即可
2. scope 为非必填项,用于描述改动的影响范围
scope可以是文件名,也可以是模块名,由自己定
3. subject 是必填项,这次提交的日志信息
附2:commitlint.config.js配置文件配置项解释
commitlint的规则由名称和配置数组组成,格式为:
"rule-name": [Level,Applicable,Value]
- Level[0,1,2]:0-禁用 1-警告 2-错误
- Applicable: always-应用 never-应用反转
- Value:用于此规则的值,可以为number/string/array等类型
可用的rule-name
包括:
body-full-stop
-
condition: 提交的
body
以value
结尾 -
rule:
never
默认为never,提交信息不以.
结尾 -
value: 默认值
.
body-leading-blank
-
condition:
body
以空行开始 -
rule:
always
body-empty
-
condition:
body
是否可为空 -
rule:
never
body-max-length
-
condition:
body
的最大长度 -
rule:
always
-
value:
Infinity
默认无穷大
body-max-line-length
-
condition:
body
最大行数 -
rule:
always
-
value:
Infinity
默认无穷大
body-min-length
-
condition:
body
最小长度 -
rule:
always
-
value:
0
默认为0
body-case
-
condition:
body
的格式 -
rule:
always
-
value:
lower-case
默认是小写格式
可用的格式列表:
[
'lower-case', // default
'upper-case', // UPPERCASE
'camel-case', // camelCase
'kebab-case', // kebab-case
'pascal-case', // PascalCase
'sentence-case', // Sentence case
'snake-case', // snake_case
'start-case' // Start Case
]
footer-leading-blank
-
condition:
footer
是否以空行开始 -
rule:
always
footer-empty
-
condition:
footer
是否可为空 -
rule:
never
footer-max-length
-
condition:
footer
最大长度 -
rule:
always
-
value:
Infinity
默认无穷大
footer-max-line-length
-
condition:
footer
最大行数 -
rule:
always
-
value:
Infinity
默认无穷大
footer-min-length
-
condition:
footer
最小长度 -
rule:
always
-
value:
0
默认为0
header-case
-
condition:
header
的格式 -
rule:
always
-
value:
lower-case
默认小写格式,可用列表同上
header-full-stop
-
condition: 提交的
header
以value
结尾 -
rule:
never
默认为never,提交信息不以.
结尾 -
value: 默认值
.
header-max-length
-
condition:
header
最大长度 -
rule:
always
-
value:
72
默认72个字符
header-min-length
-
condition:
header
最小长度 -
rule:
always
-
value:
0
默认为0
references-empty
-
condition:
references
是否必须有至少一个入口 -
rule:
never
scope-enum
-
condition: 影响范围
scope
的枚举,提交信息时只能从中选择 -
rule:
always
-
value:
[]
scope-case
-
condition:
scope
的格式 -
rule:
always
-
value:
lower-case
默认小写格式,可用列表同上
scope-empty
-
condition:
scope
是否为空 -
rule:
never
scope-max-length
-
condition:
scope
最大长度 -
rule:
always
-
value:
Infinity
默认无穷大
scope-min-length
-
condition:
scope
最小长度 -
rule:
always
-
value:
0
默认为0
subject-case
-
condition:
subject
的格式,默认其中之一:['sentence-case', 'start-case', 'pascal-case', 'upper-case']
-
rule:
always
- value: 默认['sentence-case', 'start-case', 'pascal-case', 'upper-case'],可用列表同上
subject-empty
-
condition:
subject
是否为空 -
rule:
never
subject-full-stop
-
condition:
subject
结尾符 -
rule:
never
-
value:
.
subject-max-length
-
condition:
subject
最大长度 -
rule:
always
-
value:
Infinity
默认无穷大
subject-min-length
-
condition:
subject
最小长度 -
rule:
always
-
value:
0
subject-exclamation-mark
-
condition:
subject
在:
之前是否需要一个感叹号 -
rule:
never
type-enum
-
condition:
type
的类型列表 -
rule:
always
-
value: 默认值
['feat', 'fix', 'docs', 'style', 'refactor', 'test', 'revert']
type-case
-
description:
type
的输入格式 -
rule:
always
-
value:
'lower-case'
,默认为小写,可选列表同上
type-empty
-
condition:
type
是否可为空 -
rule:
never
type-max-length
-
condition:
type
最大长度 -
rule:
always
-
value:
Infinity
默认无穷大
type-min-length
-
condition:
type
最小长度 -
rule:
always
-
value:
0
默认为0
signed-off-by
-
condition:
message
是否包含value
-
rule:
always
-
value: 默认值
'Signed-off-by:'
trailer-exists
-
condition:
message
是否有附加信息 -
rule:
always
-
value:
never
commitlint配置文件原文(英文的):https://github.com/conventional-changelog/commitlint/blob/master/docs/reference-rules.md