前言
在前端开发过程中,随着工程化的发展,我们越来越需要一个可靠的版本控制工具,对于一个开源项目来说,一个规范的版本控制是更为必要的。而 conventional-changelog-conventionalcommits
正是为我们提供了一种简单但规范的版本号管理方案。
conventional-changelog-conventionalcommits 简介
conventional-changelog-conventionalcommits
是一个 npm 包,它为我们提供了一种「约定式提交」(Conventional Commits)的规范,通过这种规范,我们可以更加简单、明了地执行版本管理。
这个规范的具体内容可以参考官网的定义文档,简单来说,它要求所有的提交都需要有如下两部分:
- 标题(Header):用于说明本次提交的主要内容,以及此次提交的类型。
- 正文(Body):用于详细描述本次提交所做的修改,比如新增哪些功能、修复哪些 Bug、删除哪些代码等。
同时,这个规范还规定了一系列的提交类型,包括但不限于:
- feat:新增某个功能。
- fix:修复某个 Bug。
- docs:关于文档的修改,比如更新了 README、增加了注释等。
- style:关于样式的修改,比如新增了一些样式文件、修改了颜色等。
- refactor:重构某部分代码。
- test:关于测试的修改,比如添加了一些测试用例、修改了一些测试代码等。
- chore:一些普通的修改,比如更新了依赖、升级了工具等。
conventional-changelog-conventionalcommits 的使用
接下来,我们来看看如何使用 conventional-changelog-conventionalcommits
这个包来实现规范化的版本控制。
第一步:安装包
我们通过 npm 安装 conventional-changelog-conventionalcommits
包:
npm install --save-dev conventional-changelog-conventionalcommits
第二步:添加 script 命令
在 package.json
文件中添加一个 script 命令:
{ "scripts": { "commit": "git-cz", "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0" } }
这里我们添加了两个命令:
commit
:使用git-cz
工具来提交符合规范的代码。changelog
:将提交的代码生成一个 CHANGELOG.md 文件,用于记录版本号的变化。
第三步:使用 git-cz
工具提交代码
我们使用 git-cz
工具来提交符合规范的代码:
npm run commit
执行此命令后,会进入到提交的交互式界面,你需要依次输入以下信息:
- type:此次提交的类型,请根据实际需要选择对应的类型。
- scope:此次提交的作用域,通常填写具体修改的文件名,比如
utils.js
、index.html
等。 - short description:此次提交的简要描述,比如「添加了一个购物车」,不需要加句号。
- long description:此次提交的详细描述,可以填写更多的信息。
经过以上步骤,我们就可以将符合「约定式提交」规范的代码提交到代码库中。
第四步:使用 conventional-changelog
生成 changelog
我们使用 conventional-changelog
工具来生成 changelog,它会依据我们在代码库中的提交记录来生成变更日志。
npm run changelog
执行后,会在项目根目录下生成一个 CHANGELOG.md 文件,里面记录了各个版本的变化如下所示:
-- -------------------- ---- ------- - ----- ------------ -- -------- - --------- -------- ----- -- --- ----- - ----------- ---------- ----- -- ----- ------- - --------- --- -------------- ------
总结
使用 conventional-changelog-conventionalcommits
可以大幅提高我们的代码版本管理的规范性,它可以协助我们生成规范的 changelog,便于我们更好地管理代码。同时,我们还可以将规范化的版本号管理集成到持续集成、持续部署等流程中去,进一步增强代码管理的自动化程度。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/100708