版本管理和CHANGELOG - 图1

规范化的提交信息除了能很好描述项目的修改,还有一个很好的作用就是能根据提交记录来生成CHANGELOG.MD和自动生成版本号等功能。

standard-version

一个用于生成CHANGELOG.md和进行SemVer(语义化版本号)发版的命令行工具

主要功能:

  • 自动修改最新版本号,可以是package.json或者自定义一个文件
  • 读取最新版本号,创建一个最新的git tag
  • 根据提交信息,生成CHANGELOG.md
  • 创建一个新提交包括 CHANGELOG.mdpackage.json

语义化版本控制(SemVer)

先简单了解下什么是语义化的版本控制,其是由GitHub发起的一份用于规范版本号递增的规则,

版本格式

主版本号.次版本号.修订号,版本号递增规则如下:

  • 主版本号(major):当你做了不兼容的 API 修改,
  • 次版本号(minor):当你做了向下兼容的功能性新增,可以理解为Feature版本,
  • 修订号(patch):当你做了向下兼容的问题修正,可以理解为Bug fix版本。

先行版本号可以加到“主版本号.次版本号.修订号”的后面,作为延伸。

先行版本

当即将发布大版本改动前,但是又不能保证这个版本的功能 100% 正常,这个时候可以发布先行版本:

  • alpha: 内部版本
  • beta: 公测版本
  • rc: 候选版本(Release candiate)

比如:1.0.0-alpha.0,1.0.0-alpha.1,1.0.0-rc.0,1.0.0-rc.1等。

standard-verstion 生成的CHANGELOG只会包含feat,fix,BREACK-CHANGE类型的提交记录

使用

  1. npm i --save-dev standard-version

添加npm script,完整的命令如下。

  1. {
  2. scripts: {
  3. "release": "standard-version",
  4. "release:alpha": "standard-version --prerelease alpha",
  5. "release:rc": "standard-version --prerelease rc",
  6. "release:major": "npm run release -- --release-as major",
  7. "release:minor": "npm run release -- --release-as minor",
  8. "release:patch": "npm run release -- --release-as patch"
  9. }
  10. }

执行过后会修改 package.version 并修改CHANGELOG 文件。

完整的 package.json

commitizen + cz-conventional-changelog + standard-version

  1. {
  2. "name": "blog",
  3. "version": "1.0.0",
  4. "description": "blog",
  5. "main": "index.js",
  6. "scripts": {
  7. "start": "npm run dev",
  8. "release": "standard-version",
  9. "release:alpha": "standard-version --prerelease alpha",
  10. "release:rc": "standard-version --prerelease rc",
  11. "release:major": "npm run release -- --release-as major",
  12. "release:minor": "npm run release -- --release-as minor",
  13. "release:patch": "npm run release -- --release-as patch"
  14. },
  15. "devDependencies": {
  16. "commitizen": "^4.2.2",
  17. "cz-conventional-changelog": "^3.3.0",
  18. "standard-version": "^9.1.0"
  19. },
  20. "config": {
  21. "commitizen": {
  22. "path": "cz-conventional-changelog"
  23. }
  24. }
  25. }