前端工程化配置(下) 规范仓库提交记录 commitlint + commitizen + cz-git + 配置
前言
- 随着多人开发团队推进着前端工程化的不断发展,团队规范与项目系统化配套工具链条也在不断诞生。
- 从
lerna或到最近兴起的pnpm管理monoreo workspace。 eslint配合pretter确保团队代码格式统一性。commitizen配合commitlint与lint-staged与husky之间的配合,把关最后提交代码质量与 commit 信息规范。- 再到利用
circleci,github action或gitee go进行CI/CD(持续集成、持续交付和持续部署)。
概念
什么是 commitlint
执行 git commit -m 'xxx' 时,用来检查 'xxx' 是否满足固定格式的工具。
为什么使用 commitlint:团队中规范了 commit 规范可以更清晰的查看每一次代码提交记录,还可以根据自定义的规则,自动生成 changeLog 文件。
什么是 commitizen
基于 Node.js 的 git commit 命令行工具,辅助生成标准化规范化的 commit message,是一个平台,具体职能交给适配器。
什么是 adapter(适配器)
更换 commitizen 命令行工具的交互方式插件。像 cz-emoji、cz-emoji-chinese、cz-conventional-changelog、cz-customizable,这些都是适配器,至于选择哪个,看个人喜好选择。
开始
本文使用 cz-git 来作为适配器,理由请看作者博客:cz-git 友好型 commitizen 的适配器
安装 commitizen
全局安装 commitizen,如此一来可以快速使用 cz 或 git cz 命令进行启动。 1
npm install -g commitizen
在项目中使用
安装 cz-git
- 安装
cz-git。
1 | pnpm install -D cz-git |
package.json添加 config 字段,为commitizen指定cz-git适配器
1 | // package.json |
配置 commitlint
- 配置
commitlint
安装 @commitlint/config-conventional @commitlint/cli
@commitlint/cli 是 commitlint 提供的命令行工具,安装后会将 cli 脚本放置在 ./node_modules/.bin/ 目录下。@commitlint/config-conventional 是社区中一些共享的配置,是根据 Angular 提交规范预定义的规则包,我们可以扩展这些配置,也可以不安装这个包自定义配置,commitlint 推荐我们使用 @commitlint/config-conventional 配置去写 commit
1 | pnpm install -D @commitlint/cli @commitlint/config-conventional |
- 创建
commitlint.config.js文件
安装完成之后,在项目根目录创建 commitlint.config.js 文件,来配置 lint 规则:
cz-git 有多种模板,例如: (⇒ 配置模板),这里使用 中英对照 + Emoji 模板,虽然官方并不推荐这么干😆
1 | // commitlint.config.js |
安装 husky
在前端工程化配置(上)构建代码检查工作流中已经安装 husky,这里直接添加 commit hook 钩子
1 | pnpx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"' |
到这里,我们设置好了 commit hook,在 commit 阶段就会先执行 .husky/commit-msg 下面的命令,这里的 .husky/commit-msg 命令是去执行 commitlint,检查 commit message 是否符合 commitlint.config.js 文件下的配置规则,这时,如果有人 commit 不符合规范的 message 就会提示错误,退出 commit 操作
操作演示

放入暂存区(git add .)以后,执行 git cz 启动 cz-git 适配器,它会读取你的 commitlint.config.js 配置,确认提交后会先触发 pre-commit hook 执行 lint-staged 检查暂存区的代码格式是否规范并修改,之后再触发 commit-msg hook。
如果你使用原生 gitcommit -m xxx 会触发 commit-msg hook,会直接打断提交,因为不符合 commitlint 规范。
最后 git push 即可。

最后,查看 github ,发现已经按照 commitlint 规范提交上去了。

参考资料
组件库代码规范husky+lint-staged+Eslint+Prettier+Stylelint
利用husky,cz-git,@commitlint/cli规范commit message