Vue 3 中工程化提交规范:Commitizen + Conventional Changelog

来源:微信开发网作者:柬埔寨程序员头衔:程序员
导读:本期聚焦于柬埔寨程序员创作的《Vue 3 中工程化提交规范:Commitizen + Conventional Changelog》,敬请观看详情。团队维护 Vue 3 应用时,经常遇到提交记录像 update code、fix bug 这样含义模糊,导致无法判断某次提交影响了哪些模块,发布 changelog 更是靠手工整理。Commitizen 提供交互式提问,把提交信息强制转成 Conventional Commits 规范,而 Conventional Changelog 能够基于这些规范提交直接生成结构清晰的 CHANGELOG.md。本文围绕 Vue 3 项目的完整配置展开,涵盖安装依赖、初始化适配器、编写 package.json 脚本、增加 commitlint 校验,以及自动生成日志的具体命令。还会指出几个高频错误,例如提交类型误写、scope 括号使用不当、changelog 生成时没有包含全部标签等。按文中的步骤操作后,开发团队可以获得一致的提交历史、可预览的变更日志,并为后续语义化版本发布和自动部署创造条件。

Vue 3 项目的协作效率,很大程度上取决于 Git 提交信息是否可读。如果每个成员都按照自己的习惯填写 commit message,比如 update、fix、修改,那么一段时间后,提交历史就变成一锅粥,发布变更日志、定位问题版本、回滚代码都会变得非常困难。Commitizen 通过交互式问答将提交信息规范成统一的 Conventional Commits 格式,Conventional Changelog 则可以直接从这些规范提交中提取信息生成 CHANGELOG.md。

Vue 3 中工程化提交规范:Commitizen + Conventional Changelog

本文将以 Vue 3 项目为例,逐步配置 Commitizen 和 Conventional Changelog,并加入 commitlint 校验,形成一套完整的工程化提交闭环。

为什么 Vue 3 需要 Conventional Commits 规范

Conventional Commits 是一套基于提交信息的轻量约定,核心格式为 <type>(<scope>): <subject>。其中 type 表示提交类型,常见的有 feat(新功能)、fix(缺陷修复)、docs(文档变更)、style(代码格式,不影响逻辑)、refactor(重构)、test(测试相关)和 chore(构建或辅助工具变更)。scope 是可选的作用范围,例如 Vue 3 项目中的 routerstorecomponent 等,subject 则是对本次提交的简短描述。

Vue 3 使用组合式 API、模块化路由与状态管理,一个功能往往涉及多个目录。如果不加约束,某个提交可能只写一个 fix,完全看不出是修了路由守卫还是修复了 Pinia 里的数据持久化问题。采用 Conventional Commits 后,所有提交信息都带类型前缀和可选范围,阅读历史时能快速过滤出某类变更,也为自动生成 changelog 和语义化版本号提供了结构化数据来源。

另一个实际好处是降低 Code Review 成本。当提交信息格式固定后,审查者无需在杂乱信息中猜测改动意图,而发布负责人也可以根据 feat 和 fix 的分布判断下一个版本是 minor 还是 patch。对于长期维护的 Vue 3 应用,这套规范是团队协作的隐形基建。

安装 Commitizen 并初始化配置

Commitizen 是一个让提交信息填写变得可交互的工具。它不会改变 Git 本身,而是在执行提交时启动一个问答流程,询问提交类型、作用范围、简短描述、详细说明和是否包含破坏性变更,最后拼装成符合 Conventional Commits 的完整 message。在 Vue 3 项目根目录下,首先安装 commitizen 和官方适配器 cz-conventional-changelog

npm install --save-dev commitizen cz-conventional-changelog

安装完成后,需要在 package.json 中增加一段 config 配置,声明使用哪个适配器。同时把 cz 命令挂到自定义脚本上,方便团队成员统一使用 npm run commit 触发交互式提交,而不用记住 npx 参数。

{
  "scripts": {
    "commit": "cz"
  },
  "config": {
    "commitizen": {
      "path": "cz-conventional-changelog"
    }
  }
}

此时运行 npm run commit,终端会依次询问:选择提交类型、输入影响范围、填写简短描述、填写详细描述、确认是否有破坏性变更以及是否关联 issue。完成所有步骤后,Commitizen 会生成一条类似 feat(login): add phone number validation 的规范提交信息,并自动执行 git commit。如果只想体验问答流程但不想真正提交,可以运行 npx cz --dry-run 预览结果。

需要注意的是,Commitizen 本身只负责生成规范信息,并不会阻止开发者使用普通 git commit -m 绕过它。因此后续还需要引入 commitlint 做强制校验,确保所有提交都符合规范。

配置 Conventional Changelog 自动生成变更日志

Conventional Changelog 是一个命令行工具,它会扫描 Git 提交历史,筛选出符合 Conventional Commits 格式的记录,按类型分组生成结构化的 CHANGELOG.md 文件。默认情况下,它会根据 angular 预设规则解析 feat、fix、perf 等类型,并自动加上版本号、日期和提交链接信息。对于 Vue 3 项目,只需要安装 conventional-changelog-cli 即可使用。

npm install --save-dev conventional-changelog-cli

安装后在 package.json 的 scripts 中增加一个 changelog 命令。常用参数中,-p angular 指定预设风格,-i CHANGELOG.md 表示输出到当前目录的 CHANGELOG.md 文件,-s 表示同时把生成的内容写入文件并输出到终端,方便检查。

{
  "scripts": {
    "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s"
  }
}

执行 npm run changelog 后,项目根目录会生成 CHANGELOG.md,内容按照版本分组,每个组内包含 Features、Bug Fixes 等小节,每条记录对应一条规范提交。如果之前的提交历史中已经存在版本标签(例如 v1.0.0、v1.1.0),工具会只生成最新一个标签之后的变更。若想从第一次提交开始重建完整日志,可以追加 -r 0 参数,命令变为 conventional-changelog -p angular -i CHANGELOG.md -s -r 0

生成 changelog 的前提是提交信息必须足够规范。如果历史中存在大量 update、修改等非结构化信息,Conventional Changelog 无法解析出有效条目,生成的日志会缺失很多内容。因此通常先规范提交流程,再逐步引入自动生成日志,这样才能保证产出质量。

用 commitlint 与 husky 强制校验提交信息

Commitizen 只是降低了填写规范信息的门槛,并没有从机制上阻止不合规提交。要让 Vue 3 团队的每个成员都遵守规则,需要借助 commitlint 对 commit message 做自动校验。commitlint 提供了多个配置预设,@commitlint/config-conventional 就是专门匹配 Conventional Commits 规范的规则集。

npm install --save-dev @commitlint/cli @commitlint/config-conventional husky

接着在项目根目录创建 commitlint.config.js,内容非常简单,直接继承 conventional 预设即可。

module.exports = {
  extends: ['@commitlint/config-conventional']
};

为了让校验发生在提交动作执行之前,需要配合 husky 管理 Git 钩子。先执行 npx husky install 初始化 husky,然后添加 commit-msg 钩子,在用户输入提交信息后立即调用 commitlint 进行检查。

npx husky install
npx husky add .husky/commit-msg 'npx --no -- commitlint --edit $1'

配置完成后,可以试着执行一条不符合规范的提交,例如 git commit -m "update code",终端会立刻报错并提示 type 字段缺失或无效。只有使用 npm run commit 生成的规范信息才能通过校验。这样就把 Commitizen 和 commitlint 结合起来,既提供了便利的填写方式,又保证了强制约束。

还需要注意,clone 仓库后 husky 钩子不会自动安装。建议在 package.json 的 scripts 中增加 prepare 脚本,内容为 husky install,这样每次执行 npm install 时都会自动初始化钩子,避免新成员提交时校验失效。

Vue 3 项目中的完整示例与常见问题

下面是一个 Vue 3 项目集成完 Commitizen、Conventional Changelog、commitlint 和 husky 后的 package.json 核心片段。scripts 中包含了 commitchangelogprepare 三个命令,config 中指定了 Commitizen 适配器。

{
  "scripts": {
    "commit": "cz",
    "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s",
    "prepare": "husky install"
  },
  "config": {
    "commitizen": {
      "path": "cz-conventional-changelog"
    }
  },
  "devDependencies": {
    "@commitlint/cli": "^18.0.0",
    "@commitlint/config-conventional": "^18.0.0",
    "commitizen": "^4.3.0",
    "conventional-changelog-cli": "^3.0.0",
    "cz-conventional-changelog": "^3.3.0",
    "husky": "^8.0.0"
  }
}

实际提交流程中,开发人员修改完代码后运行 npm run commit,根据提示选择类型为 feat,输入 scope 为 router,填写简短描述 add dynamic route support,最终生成提交信息 feat(router): add dynamic route support。随后 husky 会调用 commitlint 校验,通过后提交完成。发布新版本时运行 npm run changelog,CHANGELOG.md 会自动更新,列出本次版本中所有新功能和修复。

实践中有几个高频问题需要特别注意。首先是 scope 的括号,Conventional Commits 要求使用小括号,feat[router]feat router 都会被 commitlint 拦截。其次是提交类型,fixedbugfix 并不是标准类型,必须使用 fix。第三是 changelog 只生成最新标签之后的日志,如果项目还没有打标签,或者想重建全部历史,要加上 -r 0 参数。第四是 husky 钩子未生效,通常是因为没有配置 prepare 脚本或没有执行过 npx husky install。确认这些细节后,Vue 3 项目的提交规范和自动化变更日志就能稳定运行。

CommitizenConventional ChangelogVue 3修改时间:2026-08-21 06:42:17

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。