版本和日志管理
Changeset 是一个用于管理版本和生成变更日志的工具,特别适合 Monorepo 项目。本指南将详细介绍如何使用 Changeset 管理 VUP 项目的版本和发布。
什么是 Changeset
Changeset 是一个版本管理工具,提供:
- 语义化版本控制 - 自动管理版本号
- 变更日志生成 - 自动生成详细的变更日志
- Monorepo 支持 - 支持多包版本管理
- 发布管理 - 自动化发布流程
- 变更跟踪 - 跟踪每个变更的影响
快速开始
VUP 项目已经预配置了 Changeset,开箱即用:
1. 查看现有配置
bash
# 查看 .changeset 目录
ls .changeset/
# 查看配置文件
cat .changeset/config.json
2. 添加变更
bash
# 添加变更记录
pnpm changeset
# 选择变更类型
# - patch: 修复 bug
# - minor: 新功能
# - major: 破坏性变更
3. 生成版本
bash
# 生成版本更新
pnpm changeset version
# 发布变更
pnpm changeset publish
变更类型
Patch (补丁版本)
用于修复 bug 和小幅改进:
bash
# 示例:修复登录问题
- 修复用户登录失败的问题
- 优化错误提示信息
版本变化: 1.0.0
→ 1.0.1
Minor (次要版本)
用于新功能和向后兼容的改进:
bash
# 示例:添加新功能
- 新增用户头像上传功能
- 添加深色模式支持
- 优化页面加载速度
版本变化: 1.0.0
→ 1.1.0
Major (主要版本)
用于破坏性变更:
bash
# 示例:破坏性变更
- 重构 API 接口,移除旧版本支持
- 更改组件 API 结构
- 升级依赖版本,需要 Node.js 18+
版本变化: 1.0.0
→ 2.0.0
项目配置
.changeset/config.json
项目已包含预配置的 config.json
文件:
json
{
"$schema": "https://unpkg.com/@changesets/config@2.3.1/schema.json",
"changelog": "@changesets/cli/changelog",
"commit": false,
"fixed": [],
"linked": [],
"access": "public",
"baseBranch": "main",
"updateInternalDependencies": "patch",
"ignore": []
}
package.json 脚本
项目已包含预配置的脚本:
json
{
"scripts": {
"changeset": "changeset",
"version-packages": "changeset version",
"release": "changeset publish"
}
}
工作流程
1. 开发新功能
bash
# 创建功能分支
git checkout -b feature/new-feature
# 开发功能
# ... 编写代码 ...
# 提交代码
git add .
git commit -m "feat: add new feature"
2. 添加变更记录
bash
# 添加变更记录
pnpm changeset
# 选择变更类型
? Select a package: @vup/cli
? Select a package: @vup/templates
? Select a package: @vup/docs
? What kind of change is this for @vup/cli? minor
? What kind of change is this for @vup/templates? patch
? What kind of change is this for @vup/docs? patch
? Please enter a summary for this change: 添加新功能支持
3. 提交变更
bash
# 提交变更记录
git add .
git commit -m "chore: add changeset for new feature"
git push origin feature/new-feature
4. 合并到主分支
bash
# 合并 PR
git checkout main
git pull origin main
# 生成版本更新
pnpm changeset version
# 提交版本更新
git add .
git commit -m "chore: version packages"
git push origin main
5. 发布版本
bash
# 发布到 NPM
pnpm changeset publish
# 创建 Git 标签
git tag v1.1.0
git push origin v1.1.0
变更日志格式
自动生成的变更日志
markdown
# @vup/cli
## 1.1.0
### Minor Changes
- 添加新功能支持
## 1.0.1
### Patch Changes
- 修复登录问题
- 优化错误提示
手动添加的变更日志
markdown
# Changelog
All notable changes to this project will be documented in this file.
## [1.1.0] - 2024-01-15
### Added
- 新增用户头像上传功能
- 添加深色模式支持
- 优化页面加载速度
### Changed
- 更新依赖版本
- 优化构建配置
### Fixed
- 修复登录失败问题
- 修复页面刷新问题
## [1.0.0] - 2024-01-01
### Added
- 初始版本发布
- 基础功能实现
多包管理
链接包版本
在 .changeset/config.json
中配置:
json
{
"linked": [
["@vup/cli", "@vup/templates"],
["@vup/docs", "@vup/homepage"]
]
}
固定包版本
json
{
"fixed": [["@vup/cli", "@vup/templates", "@vup/docs"]]
}
发布策略
自动发布
使用 GitHub Actions 自动发布:
yaml
name: Release
on:
push:
branches: [main]
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18
registry-url: https://registry.npmjs.org/
- run: pnpm install
- run: pnpm changeset version
- run: pnpm changeset publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
手动发布
bash
# 检查变更
pnpm changeset status
# 生成版本
pnpm changeset version
# 发布包
pnpm changeset publish
最佳实践
1. 变更记录
- 使用清晰、简洁的描述
- 包含变更的影响范围
- 遵循语义化版本规范
2. 版本管理
- 定期发布版本
- 避免长时间积累变更
- 保持版本号的一致性
3. 变更日志
- 保持变更日志的完整性
- 使用统一的格式
- 定期更新和维护
4. 发布流程
- 在发布前进行充分测试
- 使用自动化工具减少错误
- 保持发布流程的一致性
常见问题
问题 1: 变更记录丢失
原因: 忘记提交 .changeset
目录
解决方案:
bash
# 检查变更记录
ls .changeset/
# 添加变更记录
git add .changeset/
git commit -m "chore: add changeset"
问题 2: 版本冲突
原因: 多个包版本不匹配
解决方案:
bash
# 检查版本状态
pnpm changeset status
# 手动调整版本
pnpm changeset version
问题 3: 发布失败
原因: NPM 认证或网络问题
解决方案:
bash
# 检查 NPM 认证
npm whoami
# 重新登录
npm login
# 重试发布
pnpm changeset publish