Commitizen
纵观那些 GitHub 上 star 很多的开源库,开发流程都是极其规范的,Commitizen 便是用来规范化 git 提交信息的一个好工具。

commitizen
通常要与适配器一起使用,通俗点来说是需要一个 commit message 模板,目前主流的是符合 Angular 规范的 cz-conventional-changelog
。
✨ 安装
以上命令代表全局使用 cz-conventional-changelog
适配器,你也可以通过以下命令来局部安装适配器
假如你已经全局安装了适配器,那么上面的命令会报 A previous adapter is already configured. Use --force to override,如它所说,只需要加上 --force
参数即可强制使用局部适配器,成功后会在本地局部安装 cz-conventional-changelog
,并在 package.json
中写入以下内容
🎉 使用
安装成功后即可通过命令 git-cz
来代替 git commit
进行提交了

git-cz
具有 git commit
一切参数,就像这样: git-cz -a
VSCode
用户可以安装一个 Visual Studio Code Commitizen Support
扩展以使用更友好的 commit 界面,
按下 F1
,输入 conventional commit
,效果如下
根据步骤操作就 ok 了。
Standard Version
🎈 用途
- 自动升级 version
- 自动生成 changelog
- 自动打 tag
每次更新版本后会自动将 package.json(et al.)
和 CHANGELOG.md
提交
必须确保 Commit Message 符合 Conventional Commits 规范哦!上面使用的 cz-conventional-changelog
是符合这个规范的。

🎄 安装
这里我选择全局安装
方便起见,首先新增一个 npm run script
🎀 发布第一版
发布第一版时运行以下命令,这条命令不会修改版本号
🎁 升级一个版本
🎨 生成一个预发布版本
会得到一个类似 1.0.1-0
1.0.1-1
... 这种版本
如果希望为预发布版本命名,可以通过 --prerelease <name>
指定名称。
例如,假设您的预发行版应该包含 alpha 前缀
这将得到一个 1.0.1-alpha.0
版本
🎏 手动选择版本

standard-version
遵循 Semver 语义化版本规范,假如你上次 commit 时选择的是 fix
,这时默认应该更新的是个 path
版本,如果你想手动选择版本,可以这样
🏀 阻止 Git Hooks
当 release 后,程序会自动将修改后的 package.json
和 CHANGELOG.md
文件 commit 掉,所以当使用 pre-commit
这种钩子时候可能就会报错,可以通过 --no-verify
跳过检测
🔫 生命周期脚本
standard-version
支持一些生命周期脚本
prerelease
: 发布之前prebump / postbump
: 版本号更新之前 / 之后prechangelog / postchangelog
: changelog 生成之前 / 之后precommit / postcommit
: package.json 和 changelog 文件提交之前 / 提交之后pretag / posttag
: 打 tag 之前 / 之后
就像这样,你可以在某个声明周期中偷摸做点事情 🤡
changelog
中 issue 地址默认是 GitHub 上的,如果想修改成 Jira
的地址,可以通过 postchangelog
配合 replace 库来修改它的链接地址
你也可以跳过某些生命周期 (bump
, changelog
, commit
, tag
) ,假如不想它自动打 tag
,你可以这样
🎠 Tag 前缀
默认打的 tag 前缀是 v,生成的 tag 都是类似 v1.0.0 这种,可以通过 -t
设置前缀
生成的 tag 看起来像这样 @scope/package@2.0.0
😊 帮助
更多
除此之外,还可以利用 husky
+ prettier
eslint
commitlint
lint-staged
等工具进一步优化 git 流程,利用 husky
的 pre-commit
钩子,可以在 commit 之前处理一些事情,就像
- 代码格式化
- 代码校验
- Commit Message 校验
- ...