约定式提交规范三部曲(二)之 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

更多

相关推荐
__zRainy__5 小时前
Node系列 · Node基础:net 模块
后端·node.js
嘟嘟071712 小时前
从浏览器到 hello world:Docker + nginx 反向代理 + Node 最小服务器一次讲清
docker·容器·node.js
FungLeo12 小时前
Node 后端实战 · 老系统数据迁移怎么不出乱子?V1→V2 重构实战与 3 个生产坑
node.js·serverless·数据库迁移·d1 数据库
今日无bug12 小时前
Tool Use 工具调用 —— 让LLM缸中大脑突破物理限制的3个阶段
node.js·llm·agent
To_OC1 天前
装完 ESLint 它一声不吭?我还以为代码写得多好
后端·node.js·eslint
FungLeo1 天前
Node 后端实战 · 列表查询到底怎么写?一个通用 DSL 封装,过滤分页排序一次搞定
数据库·node.js·serverless·dsl 封装·通用列表查询
_codemonster1 天前
npm run dev 是在开发模式运行,怎么在生产环境运行
前端·npm·node.js
渔夫正在掘金1 天前
Cordis 插件热插拔能力深度解析
后端·node.js
嘟嘟07172 天前
NestJS 入门:从 NestFactory 入口到 Module/Controller/Service 模块化结构一次讲清
typescript·node.js·nestjs
breeze jiang2 天前
NestJS MVC 实战:用 hello 项目 7 个文件讲清分层、装饰器、依赖注入与错误处理
node.js·mvc·js