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的命令行工具。

image-20240625171208604

安装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文件,并写入变更记录,如下图所示。

image-20240625171928791

值得注意的是,在生成 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}
  ]
}
  • typecommit 类型
  • 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 文件,如下图所示。

image-20240625174352775

如果使用了standard-version之后,就可以不再使用conventional-changelog