简单介绍下,changeset是一个版本管理和生成更新日志的工具,超级适用于多包仓库,比如monorepo,可以在提交发布时,自动更新所有包的版本号,创建Tag,并且生成更新日志。
一、安装
进入项目之后执行命令,安装changeset,并且初始化
bash
pnpm add -D @changesets/cli
pnpm changeset init
执行完之后,在项目中会新增一个.changeset目录,用于存放配置文件和临时的版本变更描述文件。
txt
.changeset/
├─ config.json
└─ README.md
二、使用流程
在通用的版本管理流程中,通常会区分为:
- 预发布版本(如alpha和beta)
- 正式版本
预发布版本
预发布阶段的两级为alpha和beta,下面是大致区别:
| 维度 | alpha(内测) | beta(公测) |
|---|---|---|
| 代码稳定性 | 随时可能大改 | 功能基本锁定,不会有大的调整 |
| 测试人群 | 团队内部 | 灰度用户 |
| 发布频率 | 每天/每周都能出包 | 节奏稍慢,某个阶段的版本 |
| 版本号示例 | 1.0.0-alpha.0 ➜ 1.0.0-alpha.1 ... | 1.0.0-beta.0 ➜ 1.0.0-beta.1 ... |
| 退出条件 | 达到功能完备 → 进入beta | 连续几天无阻塞Bug → 发布正式版 |
相关命令:
bash
pnpm changeset pre enter alpha # 进入alpha模式,
pnpm changeset version # 版本变成0.0.1-alpha.0
pnpm changeset pre enter beta # 进入beta模式
pnpm changeset version # 版本变成0.0.1-beta.0
# 结束预发布
pnpm changeset pre exit
pnpm changeset version # 版本变成0.0.1
正式版本
当你完成某个包的开发,准备发版时,执行:
bash
pnpm changeset
如果是多包仓库,终端会出现一个选择框,让你选择改过的包,
-
按空格选中你改过的包(有星号就算选中)→ 回车,
-
选包的更新级别,会依次出现major和minor,回车到下一步,如果都没选中,就默认为patch,输入本次更新的描述回车
- patch:修复小bug(1.0.0→1.0.1)
- minor:添加新功能(1.0.0→1.1.0)
- major:破坏性的大版本调整,api级别的调整(1.0.0→2.0.0)
单包仓库就直接到了选择更新级别这一步,同样是输入描述,然后回车;
生成版本号,执行:
bash
pnpm changeset version
你会发现.changeset文件夹中刚才生成的md文件都已经不见了,版本号也升好了。
发布
- 登录npm
bash
npm login
- 发版
bash
pnpm changeset publish
成功后,会在git创建对应的git tag,终端会给出每个包的版本号和 npm链接。
三、changeset总结
最后总结下,对changeset的整体感觉
优点
- 版本语义化,显式标注变更级别
- 每一次变更都会新建个文件,方便review
- 列出受影响的包
- 变更的级别,patch/minor/major
- 变更的内容
- 自动生成tag、版本号changelog
- Monorepo依赖的自动推导,比如修改了a包,b包依赖了a包,那么b包也会更新版本
缺点
- 会有额外心智负担,
- 每次变更都要执行changeset,会增加操作流程(其实我觉得这个不能算)
- 思考版本类型
- 流程容易漏
- 单包项目有点多余,没完全发挥作用