Commitizen 从0到1(git commit 规范工具)
2021-06-28 本文已影响0人
copyLeft
简介
commitizen git commit 格式化工具, 为我们提供标准化的 commit 信息。 帮助我们统一项目commit , 便于信息的回溯或日志的生成。# commit message 格式
commitizen 只是提供一个commit 格式化或交互工具, 最终需要输出符合 commit 规则的信息给 git, 所以需要线了解 commit 格式规则
<type>(<scope>):<subject> // Header
// 空行
<body>
// 空行
<footer>
- Header 信息头 (必须)
- type commit类型(必须)
- scope commit 作用范围
- subject commit 表述(必须)
- body commit 详细信息
- footer 辅助信息: 1. 不兼容变动 2. 关闭 Issue
安装
- 首先需要安装commitizen 工具本身
// 本地安装
npm i --save-dev commitizen
- 配置命令
// package.json
{
"script": {
"commit": "cz"
}
}
现在我们尝试调用一次工具命令
// 添加差异
git add *
// 执行 commit 命令
npm run commit
image.png
这里我们进入commit 编辑, 执行结果于git commit 一致, 那交互呢?
其实commitizen 一般使用需要配合对应的规则模块。 通过规则模块规范化commit 信息。
官方和社区提供了预设的规则包。
- 安装规则包
npx commitizen init cz-conventional-changelog --save-dev --save-exact
安装完成后, package.json 内将新增 commitizen 配置
image.png这里的 "path" 指向的是本地的配置模块文件
执行 npm run commit
image.png自定义配置
package.json
通过修改 package.json config 属性,设置自定义配置
image.png image.png这里我们自定义的配置覆盖了原类型交互。
配置文件
通过查看源码, 可以发现,Commitizen 默认加根目录下的 .czrc .cz.json 配置文件
image.png // 新增配置文件
touch .cz.json
image.png
自定义规则包
类似包 cz-conventional-changelog , 我们可以编写自定义的交互规则包.
新建包
// root
// 新建目录
md commit-rule
// npm 初始化
npm init -y
// 新增入口文件
touch index.js
编写包内容
Commitizen 将调用模块内的 prompter 函数获取 commit 信息
function prompter(cz, commit) {
// cz 提供基础的交互能力, 搜集 commit 信息
// commit 提交搜集的信息
cz.prompt([
{
type: 'input',
name: 'type',
message: '类型',
},
{
type: 'input',
name: 'scope',
message: '作用范围',
},
{
type: 'maxlength-input',
name: 'subject',
message: '概要',
maxLength: 20
}
]).then(answers => {
const { type, scope, subject } = answers
const message = `
${type}(${scope}):${subject}
time: ${new Date().getTime()}
`
commit(message)
})
// 导出规则函数
module.exports = {
prompter
}
### 导入自定义包
// .cz.json
{
"path": "./commit-rule"
}
执行 commit
image.png image.png根据我们自定义的规则, 成功提交了commit信息
这里只是简单的例子, 介绍简单的编写过程。 我们还可以实现更详细的信息规则或不同交互工具, 例如: inquirer Color 等 ,毕竟前端信息收集格式化都是可自定义的,最后commit 符合 git 规则的信息就可以了。