约定式提交规范三部曲(二)之 commitizen

Commitizen 是一个快速提交规范化提交信息的命令行工具,使得提交信息更加清晰、易于理解,并且符合规范。通过 Commitizen,开发者能够以一种结构化的方式填写提交信息,这使得阅读提交历史和跟踪变更更加方便。

Commitizen 本身并不是一个提交信息规范,而是一个工具,它与约定式提交规范(如 Conventional Commits 规范)结合使用。当开发者使用 Commitizen 进行提交时,它会引导开发者按照指定的格式填写提交信息,包括提交类型(如 feat, fix, docs, style, refactor, test, chore 等)、作用范围、简要描述等信息。

安装

bash 复制代码
# 全局安装
npm install -g commitizen

# 项目安装
npm install --save-dev commitizen

如果工作在非友好型仓库/项目,可以通过安装 streamich/git-cz 使用 git cz 命令进行提交,其工作方式与 git commit 相同。

友好型仓库/项目

在 Commitizen 中,友好型仓库/项目(Commitizen-friendly)指的是一个项目或仓库已经配置了 Commitizen,并且遵循了 Commitizen 提供的提交规范。

当一个项目被称为友好型仓库/项目时,意味着该项目的开发者可以使用 Commitizen 提供的交互式界面来生成符合规范的 Git 提交信息。这样做的好处是,所有的提交都将按照统一的格式进行,并且包含必要的信息,如类型、作用域、描述等。这样的提交信息更易于阅读和理解,有助于团队成员之间的沟通和协作。

Commitizen 中的适配器

在 Commitizen 中,适配器是指用于与具体提交规范相匹配的插件或配置。Commitizen 本身提供了一种通用的提交信息格式规范,但不同的项目或团队可能有不同的提交规范要求,这时就需要使用适配器来定制化 Commitizen 的行为。

最常用的适配器之一是 cz-conventional-changelog,它与 Angular 团队的提交信息规范 兼容,并且被广泛应用于许多开源项目和企业内部的代码仓库中。

同时,作者基于 cz-conventional-changelog 制作的简体中文版适配器 cz-conventional-chanagelog-zh-cn 已经发布至 npmjs

配置友好型仓库/项目

配置英文适配器:

bash 复制代码
# npm
npx commitizen init cz-conventional-changelog --save-dev --save-exact
# yarn
npx commitizen init cz-conventional-changelog --yarn --dev --exact
# pnpm
npx commitizen init cz-conventional-changelog --pnpm --save-dev --save-exact

简体中文版仅需将 cz-conventional-changelog 替换为 cz-conventional-changelog-zh-cn:

bash 复制代码
# npm
npx commitizen init cz-conventional-changelog-zh-cn --save-dev --save-exact
# yarn
npx commitizen init cz-conventional-changelog-zh-cn --yarn --dev --exact
# pnpm
npx commitizen init cz-conventional-changelog-zh-cn --pnpm --save-dev --save-exact

**注意:**如果正在使用类似 huskyprecommit 钩子,需要将脚本命名为 "commit"(例如"cm": "cz")以外的名称。

原因在于 npm 脚本具有一个特性,即它会自动运行名称为 prexxx 的脚本,其中 xxx 是另一个脚本的名称。实质上,如果你将脚本命名为 "commit",npm 和 husky 将会运行 precommit 脚本两次,解决方法是防止 npm 触发的 precommit 脚本。

运行

使用 npx 方式运行:

bash 复制代码
npx cz

使用 package.json 脚本的方式运行:

bash 复制代码
npm pkg set scripts.commit="cz"

或将下面内容加入 package.json

json 复制代码
"scripts": {
  "commit": "cz"
}

然后执行 npm run commit

多仓库/项目模板化

作为多个仓库/项目的维护者,可能希望为所有这些项目统一采用相同的提交信息格式或者适配器。可以创建自己的 Node 模块,从而实现这一目标。参考 Commitizen for multi-repo projects 指南。

同时作者在 npmjs 发布了通用的 cz-conventional-template-zh-cn 模块,该模块可应用于多仓库/项目(multi-repo)的简体中文模板 ,目前作者的所有项目全部都基于此模板进行规范化提交。

  • 内部集成 cz-conventional-changelog-zh-cn 适配器,完全兼容 Angular 团队的提交信息规范标准。
  • 集成 commitizen,无需另行下载额外配置。
  • 通用简体中文模板,统一标准服务多(单)仓库/项目。

安装与运行

bash 复制代码
# 创建项目目录
mkdir my-project

# 初始化 git
git init

# 初始化 nodejs 项目
npm init

# 以开发依赖方式安装 cz-conventional-template-zh-cn
npm install --save-dev cz-conventional-template-zh-cn

# 添加运行脚本
npm pkg set scripts.commit="cz-zh-cn"

# ... 执行 git add 添加待提交文件后

# 运行命令提交 git
npm run commit

更多

相关推荐
理想不理想v12 小时前
webpack最基础的配置
前端·webpack·node.js
南城巷陌14 小时前
JWT认证机制在Node.js中的详细阐述
node.js·jwt认证机制·前端安全认证
理想不理想v16 小时前
node.js的简单示例
node.js
yrldjsbk17 小时前
使用Node.js搭配express框架快速构建后端业务接口模块Demo
node.js·express
维李设论17 小时前
Node.js的Web服务在Nacos中的实践
前端·spring cloud·微服务·eureka·nacos·node.js·express
CodeChampion18 小时前
60.基于SSM的个人网站的设计与实现(项目 + 论文)
java·vue.js·mysql·spring·elementui·node.js·mybatis
Domain-zhuo18 小时前
如何利用webpack来优化前端性能?
前端·webpack·前端框架·node.js·ecmascript
理想不理想v18 小时前
webpack如何自定义插件?示例
前端·webpack·node.js
斜杠poven1 天前
为什么加try catch 不会 block 进程?
前端·javascript·node.js