版本管理策略
本项目使用 Changesets 进行版本管理和发布。这个文档描述了我们的版本管理策略和工作流程。
语义化版本
我们遵循 语义化版本 2.0.0 规范,版本号格式为:主版本号.次版本号.修订号。
- 主版本号:当你做了不兼容的 API 修改
- 次版本号:当你做了向下兼容的功能性新增
- 修订号:当你做了向下兼容的问题修正
版本增量规则
在创建 changeset 时,需要根据变更的性质选择版本增量类型:
- major:不兼容的 API 变更,如:
- 删除或重命名公共 API
- 更改公共 API 的行为方式
- 更改公共 API 的参数或返回类型
- minor:向下兼容的功能性新增,如:
- 添加新功能或新的公共 API
- 添加新的可选参数
- 添加新的配置选项
- patch:向下兼容的问题修正,如:
- 修复 bug
- 性能优化
- 文档更新
- 依赖更新(不影响 API)
工作流程
1. 创建变更集
当你完成一个功能或修复一个 bug 时,需要创建一个变更集:
bash
pnpm changeset这个命令会引导你:
- 选择受影响的包
- 选择版本增量类型(major、minor 或 patch)
- 提供变更描述
2. 提交变更
创建变更集后,将生成的 .changeset 目录下的文件一起提交:
bash
git add .changeset
git commit -m "chore: add changeset for [简短描述]"3. 版本更新
当变更集被合并到主分支后,CI 会自动运行版本更新:
bash
pnpm ci:version这个命令会:
- 读取所有变更集
- 更新受影响包的版本
- 更新依赖关系
- 生成或更新 CHANGELOG.md
4. 发布
版本更新后,CI 会自动发布包:
bash
pnpm ci:publish依赖关系处理
在 monorepo 中,包之间可能存在依赖关系。Changesets 会自动处理这些依赖关系:
- 当一个包发生变更时,所有依赖它的包也会更新
- 内部依赖的版本更新策略在
.changeset/config.json中配置
预发布
对于重大变更,我们使用预发布版本进行测试:
bash
pnpm changeset pre enter next
pnpm ci:version
pnpm ci:publish这会发布带有 next 标签的预发布版本。
手动发布
在特殊情况下,可能需要手动发布:
bash
# 进入需要发布的包目录
cd packages/my-package
# 发布
npm publish版本历史
每个包的版本历史记录在其 CHANGELOG.md 文件中,包含每个版本的变更内容和贡献者信息。