Skip to content

版本和日志管理

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.01.0.1

Minor (次要版本)

用于新功能和向后兼容的改进:

bash
# 示例:添加新功能
- 新增用户头像上传功能
- 添加深色模式支持
- 优化页面加载速度

版本变化: 1.0.01.1.0

Major (主要版本)

用于破坏性变更:

bash
# 示例:破坏性变更
- 重构 API 接口,移除旧版本支持
- 更改组件 API 结构
- 升级依赖版本,需要 Node.js 18+

版本变化: 1.0.02.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

相关资源