实现自动化升级版本号和Changelog及Tag
1、前置
在实现自动化升级版本号之前,可以先了一下NPM的版本管理与Commit提交规范
2、Change log
Change log
也就是版本的变更记录,如果目前提交的Commit
都符合规范,那么发布新版本时, Change log
就可以用脚本自动生成,一般生成的文档包括以下部分。
- New features
- Bug fixes
每个部分都会罗列相关的 commit
,并且有指向这些 commit
的链接。
conventional-changelog 是一个生成 Change log
的工具,这里我们选择安装的是conventional-changelog-cli
,它是conventional-changelog
的命令行工具。
安装conventional-changelog
的命令
pnpm i -D conventional-changelog-cli
基于上次 tag 版本之后的变更(Feature、Fix、Breaking Changes等等)所产生的
conventional-changelog -p angular -i CHANGELOG.md -s
项目正式使用。--- 生成之前所有 commit 信息产生的 changelog
conventional-changelog -p angular -i CHANGELOG.md -s -r 0
在package.json
中添加脚本
{
"scripts": {
"changelog:all": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0",
"changelog:last-tag": "conventional-changelog -p angular -i CHANGELOG.md -s",
}
}
执行上述命令后,如果在本地没有存在CHANGELOG.md
文件,那么它将自动创建CHANGELOG.md
文件,并写入变更记录,如下图所示。
值得注意的是,在生成
Chang log
之前,需要先使用npm version
更改版本号。
2、standard-version
standard-version 是一款遵循语义化版本( semver
)和 commit message
标准规范的自动化 Chang log
工具。记住它的特点:自动化工具。
它会更新
CHANGELOG.md
,以及自动修改package.json
里的version
,并且自动打上tag
。
2.1、安装
standard-version
的安装命令如下:
pnpm i -D standard-version
可以添加参数-–release-as
或者-r
指定版本号:主版本(major
)、次版本( minor
)、修订版(patch
)。可以在package.json
中添加以下脚本:
"scripts": {
"release": "standard-version",
"release:major": "standard-version --release-as major",
"release:minor": "standard-version --release-as minor"
},
2.2、配置
创建 .versionrc
文件:
{
"types": [
{"type": "chore", "section":"Others", "hidden": false},
{"type": "revert", "section":"Reverts", "hidden": false},
{"type": "feat", "section": "Features", "hidden": false},
{"type": "fix", "section": "Bug Fixes", "hidden": false},
{"type": "docs", "section":"Docs", "hidden": false},
{"type": "style", "section":"Styling", "hidden": false},
{"type": "refactor", "section":"Code Refactoring", "hidden": false},
{"type": "perf", "section":"Performance Improvements", "hidden": false},
{"type": "test", "section":"Tests", "hidden": false},
{"type": "build", "section":"Build System", "hidden": false},
{"type": "ci", "section":"CI", "hidden":false}
]
}
- type:
commit
类型 - section:不同的
commit
类型所在CHANGELOG.md
中的区域 - hidden:是否在
CHANGELOG.md
中显示
2.3、参数
-
-r: 指定版本号
// 自定义版本号2.0.0 standard-version -r 2.0.0
-
–-tag-prefix, -t: 用来给生成
tag
标签添加前缀,例如如果前版本号为 2.0.0,则:standard-version --tag-prefix "tags-" // 输出版本 tags-v2.0.0
2.4、测试
执行release
脚本
pnpm run release
执行完以后就会在项目根目录自动生成 CHANGELOG.md
文件,如下图所示。
如果使用了
standard-version
之后,就可以不再使用conventional-changelog
了