什么是 Changesets #
Changesets 是一个用于管理版本和 changelog 的工具,专注于解决 Monorepo 多包管理问题。它让贡献者在提交代码时声明如何发布变更,然后自动更新版本号、生成 changelog 并发布包。
# 安装 Changesets
npm install -D @changesets/cli
# 初始化
npx changeset init
# 添加 changeset
npx changeset
# 版本更新
npx changeset version
# 发布
npx changeset publish核心特性 #
- 📝 变更记录:在开发时记录变更,而不是发布时
- 🔢 版本管理:自动处理版本号更新(semver)
- 📋 Changelog 生成:自动生成格式化的 changelog
- 🎯 Monorepo 支持:处理多包之间的依赖关系
- 🤖 CI/CD 集成:自动化版本发布流程
- 👥 团队协作:多人协作时的版本管理
为什么需要 Changesets #
传统版本管理的问题 #
没有 Changesets 之前,Monorepo 版本管理面临诸多问题:
# ❌ 传统方式:手动管理版本
# 1. 修改代码
# 2. 手动更新 package.json 版本号
# 3. 手动写 CHANGELOG.md
# 4. 手动检查依赖包的版本
# 5. 手动发布每个包
# 问题:
# - 容易忘记更新版本
# - 忘记记录 changelog
# - 依赖包版本不一致
# - 发布流程繁琐
# - 多人协作冲突
# 项目结构
packages/
├── shared/ (v1.0.0)
├── ui/ (v1.2.0) → 依赖 shared@1.0.0
└── web/ (v2.1.0) → 依赖 ui@1.2.0, shared@1.0.0
# 如果更新了 shared:
# ❌ 需要手动更新:
# 1. shared 的版本号
# 2. ui 的依赖版本
# 3. web 的依赖版本
# 4. 三个包的 CHANGELOG.md使用 Changesets 后 #
# ✅ 使用 Changesets:自动化流程
# 1. 添加 changeset(开发时)
npx changeset
# ? Which packages would you like to include?
# ✓ shared
# ? What kind of change is this for shared?
# ✓ minor (增加新功能)
# ? Please enter a summary: 添加新的工具函数
# 2. 版本更新(发布前)
npx changeset version
# ✓ 自动更新 shared 版本:1.0.0 → 1.1.0
# ✓ 自动更新 ui 依赖:shared@1.0.0 → shared@1.1.0
# ✓ 自动更新 web 依赖:shared@1.0.0 → shared@1.1.0
# ✓ 自动生成 CHANGELOG.md
# 3. 发布(一键发布)
npx changeset publish
# ✓ 发布 shared@1.1.0
# ✓ 发布 ui@1.2.1(依赖更新)
# ✓ 发布 web@2.1.1(依赖更新)
# ✓ 推送 git tags效果:
- ✅ 自动管理版本号
- ✅ 自动生成 changelog
- ✅ 自动处理依赖关系
- ✅ 避免版本冲突
- ✅ 简化发布流程
安装 #
基础安装 #
# 使用 npm
npm install -D @changesets/cli
# 使用 yarn
yarn add -D @changesets/cli
# 使用 pnpm(推荐)
pnpm add -D @changesets/cli初始化 #
# 初始化 Changesets
npx changeset init
# 生成的文件
.changeset/
├── config.json # 配置文件
└── README.md # 使用说明基础工作流 #
1. 添加 Changeset #
# 开发完成后,添加 changeset
npx changeset
# 交互式问答
? Which packages would you like to include? ›
◉ @my-monorepo/shared
◯ @my-monorepo/ui
◯ @my-monorepo/web
? What kind of change is this for @my-monorepo/shared? ›
◯ major (破坏性更新)
◉ minor (新功能)
◯ patch (bug 修复)
? Please enter a summary for this change:
添加新的日期格式化函数
# 生成文件:.changeset/random-name.md
---
"@my-monorepo/shared": minor
---
添加新的日期格式化函数2. 版本更新 #
# 更新版本号
npx changeset version
# 自动执行:
# 1. 读取所有 changeset 文件
# 2. 计算新版本号
# 3. 更新 package.json
# 4. 生成 CHANGELOG.md
# 5. 删除已处理的 changeset 文件3. 发布 #
# 发布到 npm
npx changeset publish
# 自动执行:
# 1. 发布所有更新的包
# 2. 推送 git tags配置文件 #
config.json 结构 #
{
"$schema": "https://unpkg.com/@changesets/config@3.0.0/schema.json",
"changelog": "@changesets/cli/changelog",
"commit": false,
"fixed": [],
"linked": [],
"access": "restricted",
"baseBranch": "main",
"updateInternalDependencies": "patch",
"ignore": []
}一、核心配置选项 #
1.1 changelog(Changelog 生成器) #
作用:指定 changelog 生成方式。
{
"changelog": "@changesets/cli/changelog"
}可选值:
// 默认生成器
{
"changelog": "@changesets/cli/changelog"
}
// 使用 GitHub
{
"changelog": [
"@changesets/changelog-github",
{ "repo": "owner/repo" }
]
}
// 自定义生成器
{
"changelog": "./my-changelog-generator.js"
}
// 不生成 changelog
{
"changelog": false
}影响对比:
<!-- @changesets/cli/changelog -->
## 1.1.0
### Minor Changes
- abc123: 添加新功能
<!-- @changesets/changelog-github -->
## 1.1.0
### Minor Changes
- [#123](https://github.com/owner/repo/pull/123) 添加新功能 ([@username](https://github.com/username))
<!-- false -->
(不生成 CHANGELOG.md)1.2 commit(自动提交) #
作用:版本更新后是否自动提交。
{
"commit": false // 默认值,不自动提交
}
// 启用自动提交
{
"commit": true
}
// 自定义提交信息
{
"commit": ["chore: release packages", { "skipCI": true }]
}影响对比:
# commit: false(默认)
npx changeset version
# ✓ 版本更新完成
# ✗ 不自动提交(需要手动 git commit)
git add .
git commit -m "chore: version packages"
# commit: true
npx changeset version
# ✓ 版本更新完成
# ✓ 自动提交(使用默认 commit 信息)
# commit: ["chore: release", { "skipCI": true }]
npx changeset version
# ✓ 版本更新完成
# ✓ 自动提交:chore: release [skip ci]1.3 access(发布权限) #
作用:指定包的发布权限。
{
"access": "restricted" // 私有包(默认)
}
// 公开包
{
"access": "public"
}影响对比:
# access: "restricted"
npx changeset publish
# → npm publish --access restricted
# (只有授权用户可以安装)
# access: "public"
npx changeset publish
# → npm publish --access public
# (所有人都可以安装)使用场景:
// 私有 Monorepo
{
"access": "restricted"
}
// 开源项目
{
"access": "public"
}
// 混合(在 package.json 中单独配置)
{
"access": "public", // 默认公开
"packages": {
"@my-org/internal": {
"access": "restricted" // 特定包私有
}
}
}1.4 baseBranch(基础分支) #
作用:指定版本管理的基础分支。
{
"baseBranch": "main" // 默认
}
// 使用其他分支
{
"baseBranch": "master"
}
{
"baseBranch": "develop"
}影响对比:
# baseBranch: "main"
git checkout feature-branch
npx changeset
# Changesets 会检查:
# - 当前分支相对于 main 的变更
# - 确保在 main 分支上发布
# baseBranch: "develop"
# - 基于 develop 分支管理版本
# - 发布前需要合并到 develop1.5 updateInternalDependencies(内部依赖更新) #
作用:当包更新时,如何更新依赖它的包。
{
"updateInternalDependencies": "patch" // 默认
}可选值:
| 值 | 说明 | 示例 |
|---|---|---|
"patch" | 更新为 patch 版本 | 依赖从 1.0.0 → 1.0.1 |
"minor" | 更新为 minor 版本 | 依赖从 1.0.0 → 1.1.0 |
影响对比:
// 项目结构
{
"packages": {
"shared": "1.0.0",
"ui": "1.0.0" // 依赖 shared@1.0.0
}
}
// shared 添加了 minor 变更
// updateInternalDependencies: "patch"
{
"shared": "1.1.0",
"ui": "1.0.1" // 自动 patch 更新
}
// updateInternalDependencies: "minor"
{
"shared": "1.1.0",
"ui": "1.1.0" // 自动 minor 更新
}1.6 fixed(固定版本) #
作用:将多个包的版本固定在一起(统一版本)。
{
"fixed": [
["@my-monorepo/ui", "@my-monorepo/theme"]
]
}影响对比:
# 不使用 fixed
# ui: 1.0.0 → 1.1.0
# theme: 1.5.0 → 1.5.0(不变)
# 使用 fixed
{
"fixed": [["@my-monorepo/ui", "@my-monorepo/theme"]]
}
# 更新 ui
npx changeset version
# ui: 1.0.0 → 1.1.0
# theme: 1.5.0 → 1.1.0(同步更新)使用场景:
// Vue 生态(vue, vue-router, vuex 统一版本)
{
"fixed": [
["vue", "vue-router", "vuex"]
]
}
// UI 组件库(核心和主题统一版本)
{
"fixed": [
["@myui/core", "@myui/theme", "@myui/icons"]
]
}1.7 linked(关联版本) #
作用:链接多个包,但保持独立版本号。
{
"linked": [
["@my-monorepo/ui", "@my-monorepo/components"]
]
}fixed vs linked:
# fixed:统一版本号
{
"fixed": [["ui", "theme"]]
}
# ui: 1.0.0 → 1.1.0
# theme: 2.0.0 → 1.1.0(版本号相同)
# linked:同时更新,但保持相对关系
{
"linked": [["ui", "theme"]]
}
# ui: 1.0.0 → 1.1.0
# theme: 2.0.0 → 2.1.0(同时 minor 更新,但版本号不同)1.8 ignore(忽略包) #
作用:排除不需要版本管理的包。
{
"ignore": [
"@my-monorepo/docs",
"@my-monorepo/examples"
]
}影响对比:
# 不使用 ignore
npx changeset
# 显示所有包:
# ◯ @my-monorepo/shared
# ◯ @my-monorepo/ui
# ◯ @my-monorepo/docs ← 文档包也显示
# ◯ @my-monorepo/examples ← 示例包也显示
# 使用 ignore
{
"ignore": ["@my-monorepo/docs", "@my-monorepo/examples"]
}
npx changeset
# 只显示需要管理的包:
# ◯ @my-monorepo/shared
# ◯ @my-monorepo/ui1.9 privatePackages(私有包) #
作用:配置私有包的行为。
{
"privatePackages": {
"version": true, // 是否更新版本
"tag": false // 是否打 git tag
}
}影响对比:
// package.json
{
"private": true,
"name": "@my-monorepo/internal"
}
// privatePackages.version: true
npx changeset version
# ✓ 更新 internal 的版本号
# ✓ 更新依赖它的包
// privatePackages.version: false
npx changeset version
# ✗ 跳过 internal 的版本更新二、完整推荐配置 #
2.1 开源项目配置 #
{
"$schema": "https://unpkg.com/@changesets/config@3.0.0/schema.json",
"changelog": [
"@changesets/changelog-github",
{ "repo": "username/repo" }
],
"commit": false,
"fixed": [],
"linked": [],
"access": "public",
"baseBranch": "main",
"updateInternalDependencies": "patch",
"ignore": ["@my-monorepo/docs", "@my-monorepo/examples"]
}2.2 私有项目配置 #
{
"$schema": "https://unpkg.com/@changesets/config@3.0.0/schema.json",
"changelog": "@changesets/cli/changelog",
"commit": true,
"fixed": [],
"linked": [],
"access": "restricted",
"baseBranch": "main",
"updateInternalDependencies": "patch",
"ignore": []
}2.3 统一版本配置 #
{
"$schema": "https://unpkg.com/@changesets/config@3.0.0/schema.json",
"changelog": "@changesets/cli/changelog",
"commit": false,
"fixed": [
["@myui/core", "@myui/theme", "@myui/icons"]
],
"linked": [],
"access": "public",
"baseBranch": "main",
"updateInternalDependencies": "minor",
"ignore": []
}2.4 混合模式配置 #
{
"$schema": "https://unpkg.com/@changesets/config@3.0.0/schema.json",
"changelog": [
"@changesets/changelog-github",
{ "repo": "username/repo" }
],
"commit": false,
"fixed": [
["@my-monorepo/ui", "@my-monorepo/theme"]
],
"linked": [
["@my-monorepo/core", "@my-monorepo/utils"]
],
"access": "public",
"baseBranch": "main",
"updateInternalDependencies": "patch",
"ignore": [
"@my-monorepo/docs",
"@my-monorepo/examples",
"@my-monorepo/internal"
]
}三、常用命令 #
3.1 基础命令 #
# 初始化
npx changeset init
# 添加 changeset
npx changeset
npx changeset add # 同上
# 查看状态
npx changeset status
npx changeset status --verbose # 详细信息
npx changeset status --since main # 自指定分支以来的变更3.2 版本管理 #
# 更新版本
npx changeset version
# 预发布版本
npx changeset pre enter alpha
npx changeset version
npx changeset pre exit
# 查看将要发布的版本
npx changeset version --dry-run3.3 发布 #
# 发布到 npm
npx changeset publish
# 发布并打 tag
npx changeset publish --tag next
# 只打 tag,不发布
npx changeset tag3.4 预发布 #
# 1. 进入预发布模式
npx changeset pre enter alpha
# 2. 添加 changeset
npx changeset
# 3. 更新版本
npx changeset version
# 1.0.0 → 1.1.0-alpha.0
# 4. 发布
npx changeset publish
# 5. 退出预发布模式
npx changeset pre exit3.5 配置 package.json #
{
"scripts": {
"changeset": "changeset",
"version": "changeset version",
"release": "changeset publish",
"status": "changeset status"
}
}四、CI/CD 集成 #
4.1 GitHub Actions(推荐) #
# .github/workflows/release.yml
name: Release
on:
push:
branches:
- main
concurrency: ${{ github.workflow }}-${{ github.ref }}
jobs:
release:
name: Release
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: 18
- name: Setup pnpm
uses: pnpm/action-setup@v2
with:
version: 8
- name: Install dependencies
run: pnpm install
- name: Create Release Pull Request or Publish
uses: changesets/action@v1
with:
version: pnpm version
publish: pnpm release
commit: 'chore: version packages'
title: 'chore: version packages'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}工作流程:
1. 开发者提交代码 + changeset
↓
2. GitHub Actions 检测到 changesets
↓
3. 创建版本更新 PR
- 自动更新版本号
- 自动生成 CHANGELOG
↓
4. Review 并合并 PR
↓
5. 自动发布到 npm4.2 检查 Changeset #
# .github/workflows/check-changeset.yml
name: Check Changeset
on:
pull_request:
branches:
- main
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- uses: pnpm/action-setup@v2
with:
version: 8
- run: pnpm install
- name: Check for changesets
run: |
if [ "$(ls -A .changeset/*.md 2>/dev/null | grep -v README)" ]; then
echo "✓ Changeset found"
else
echo "✗ No changeset found"
exit 1
fi4.3 Changeset Bot #
安装 Changeset Bot:
自动在 PR 中提示:
- ✓ Has changeset(包含 changeset)
- ✗ Missing changeset(缺少 changeset)
- 📝 Click here to add a changeset(点击添加)五、常见问题和最佳实践 #
5.1 什么时候添加 Changeset #
时机:
# ✅ 正确时机
1. Feature 完成后
2. Bug 修复后
3. 破坏性更新后
4. PR 提交前
# ❌ 错误时机
1. 重构代码(用户不可见)
2. 更新依赖(不影响功能)
3. 修改文档
4. 调整配置判断标准:
需要添加 changeset:
- 用户可见的变更
- API 变更
- 新功能
- Bug 修复
- 性能优化
不需要添加 changeset:
- 内部重构
- 依赖更新
- 文档更新
- 配置调整
- CI/CD 配置5.2 如何选择版本类型 #
Semver 规则:
# major(破坏性更新)1.0.0 → 2.0.0
- 删除 API
- 修改 API 签名
- 改变默认行为
- 不兼容的更新
示例:
- 删除 formatDate 函数
- 修改 add(a, b) → add({ a, b })
- 改变返回值类型
# minor(新功能)
1.0.0 → 1.1.0
- 添加新 API
- 新增功能
- 向后兼容的更新
示例:
- 添加 formatDateTime 函数
- 添加可选参数 add(a, b, options?)
- 添加新的工具函数
# patch(Bug 修复)
1.0.0 → 1.0.1
- Bug 修复
- 性能优化
- 文档更新(用户可见)
示例:
- 修复 formatDate 的 bug
- 优化性能
- 修正类型定义5.3 依赖包版本不一致 #
问题:更新了 shared 包,但 ui 和 web 的依赖没有更新。
解决方案:
// .changeset/config.json
{
"updateInternalDependencies": "patch"
}
// 执行版本更新
npx changeset version
// 结果:
// shared: 1.0.0 → 1.1.0
// ui: 1.5.0 → 1.5.1(依赖自动更新为 shared@1.1.0)
// web: 2.0.0 → 2.0.1(依赖自动更新为 shared@1.1.0, ui@1.5.1)5.4 多个 Changeset 如何合并 #
场景:一个 PR 包含多个变更。
方案一:一个 changeset 包含所有变更
npx changeset
? Which packages would you like to include?
◉ @my-monorepo/shared
◉ @my-monorepo/ui
? What kind of change is this for shared?
◉ minor
? What kind of change is this for ui?
◉ patch
? Please enter a summary:
添加新功能并修复 UI bug方案二:多个独立的 changeset
# 第一个 changeset
npx changeset
# shared: minor - 添加新功能
# 第二个 changeset
npx changeset
# ui: patch - 修复 bug
# 版本更新时会自动合并
npx changeset version5.5 私有包的处理 #
问题:私有包不需要发布到 npm。
解决方案:
// package.json
{
"name": "@my-monorepo/internal",
"private": true // 标记为私有
}
// .changeset/config.json
{
"privatePackages": {
"version": true, // 仍然更新版本号
"tag": false // 不打 git tag
},
"ignore": [
"@my-monorepo/internal" // 或者完全忽略
]
}5.6 Monorepo 发布策略 #
策略一:独立版本(推荐)
{
"fixed": [],
"linked": []
}
// 结果:
// shared: 1.0.0 → 1.1.0
// ui: 2.5.0 → 2.5.1
// web: 3.2.0 → 3.2.1策略二:固定版本
{
"fixed": [
["@my-monorepo/shared", "@my-monorepo/ui", "@my-monorepo/web"]
]
}
// 结果(统一版本):
// shared: 1.0.0 → 2.0.0
// ui: 1.0.0 → 2.0.0
// web: 1.0.0 → 2.0.0策略三:混合模式
{
"fixed": [
["@my-monorepo/ui", "@my-monorepo/theme"] // UI 相关统一
],
"linked": [],
"ignore": ["@my-monorepo/docs"] // 文档包忽略
}
// 结果:
// shared: 1.0.0 → 1.1.0(独立)
// ui: 2.0.0 → 2.1.0(和 theme 统一)
// theme: 2.0.0 → 2.1.0(和 ui 统一)
// web: 3.0.0 → 3.0.1(独立,依赖更新)5.7 最佳实践 #
1. 在 PR 中添加 Changeset #
# 开发流程
1. git checkout -b feature/new-function
2. 开发功能
3. npx changeset # 添加 changeset
4. git add .
5. git commit -m "feat: add new function"
6. 提交 PR2. 使用 Changeset Bot #
安装 Changeset Bot 到 GitHub 仓库
→ 自动检查 PR 是否包含 changeset
→ 提供快速添加 changeset 的链接3. 配置 package.json scripts #
{
"scripts": {
"changeset": "changeset",
"changeset:status": "changeset status",
"version": "changeset version && pnpm install --lockfile-only",
"release": "pnpm build && changeset publish"
}
}4. 提交信息规范 #
# changeset 文件名规范
.changeset/
├── kind-tigers-smile.md # 随机名称(默认)
├── add-new-feature.md # 或自定义名称
└── fix-button-bug.md
# changeset 内容规范
---
"@my-monorepo/ui": minor
---
添加新的 Button 组件
- 支持多种尺寸
- 支持主题定制
- 完善的 TypeScript 类型5. 发布前检查 #
# 1. 检查 changeset 状态
npx changeset status
# 2. 预览版本更新
npx changeset version --dry-run
# 3. 构建所有包
pnpm build
# 4. 运行测试
pnpm test
# 5. 发布
npx changeset publish六、实际案例 #
案例 1:开源组件库 #
// .changeset/config.json
{
"$schema": "https://unpkg.com/@changesets/config@3.0.0/schema.json",
"changelog": [
"@changesets/changelog-github",
{ "repo": "myorg/ui-library" }
],
"commit": false,
"fixed": [
["@myui/core", "@myui/theme"]
],
"access": "public",
"baseBranch": "main",
"updateInternalDependencies": "patch",
"ignore": [
"@myui/docs",
"@myui/examples"
]
}工作流:
# 1. 开发新组件
# 2. 添加 changeset
npx changeset
# ? @myui/core: minor
# ? 添加 Select 组件
# 3. 提交 PR
git commit -m "feat: add Select component"
# 4. 合并后,CI 创建版本 PR
# 5. Review 版本 PR
# 6. 合并版本 PR,自动发布案例 2:私有工具库 #
// .changeset/config.json
{
"changelog": "@changesets/cli/changelog",
"commit": true,
"access": "restricted",
"baseBranch": "main",
"updateInternalDependencies": "minor",
"privatePackages": {
"version": true,
"tag": false
}
}// package.json
{
"scripts": {
"changeset": "changeset",
"version": "changeset version",
"release": "pnpm build && changeset publish"
}
}案例 3:大型 Monorepo #
// .changeset/config.json
{
"changelog": [
"@changesets/changelog-github",
{ "repo": "company/monorepo" }
],
"commit": false,
"fixed": [
["@company/ui-core", "@company/ui-theme"],
["@company/shared-utils", "@company/shared-types"]
],
"linked": [
["@company/app-web", "@company/app-mobile"]
],
"access": "restricted",
"baseBranch": "develop",
"updateInternalDependencies": "patch",
"ignore": [
"@company/docs",
"@company/internal-tools",
"@company/examples"
]
}七、与其他工具对比 #
Changesets vs Lerna #
| 特性 | Changesets | Lerna |
|---|---|---|
| 版本管理 | ✅ 灵活(独立/固定) | ✅ 支持 |
| Changelog | ✅ 自动生成 | ⚠️ 需要插件 |
| 工作流 | ⭐⭐⭐ 简单 | ⭐⭐ 中等 |
| CI/CD | ✅ 优秀的 GitHub Action | ⚠️ 需要自己配置 |
| 学习曲线 | ⭐⭐ 低 | ⭐⭐⭐ 高 |
| 社区 | ⭐⭐⭐ 活跃 | ⭐⭐ 一般 |
Changesets vs semantic-release #
| 特性 | Changesets | semantic-release |
|---|---|---|
| 手动控制 | ✅ 开发者决定版本 | ❌ 自动判断 |
| Monorepo | ✅ 原生支持 | ⚠️ 需要配置 |
| 灵活性 | ⭐⭐⭐ 高 | ⭐⭐ 中 |
| 学习曲线 | ⭐⭐ 低 | ⭐⭐⭐ 高 |
推荐选择:
Monorepo + 手动控制版本 → Changesets ⭐⭐⭐⭐⭐
- 多包管理
- 灵活的版本策略
- 优秀的 CI/CD 集成
自动化语义化版本 → semantic-release ⭐⭐⭐⭐
- 基于 commit 自动判断版本
- 适合单一仓库
传统 Monorepo 工具 → Lerna ⭐⭐⭐
- 成熟稳定
- 功能全面
- 但 Changesets 更现代八、总结 #
核心优势 #
- 开发时记录变更:不用在发布时回忆改了什么
- 自动版本管理:自动处理版本号和依赖关系
- 自动 Changelog:自动生成格式化的更新日志
- Monorepo 友好:专为多包仓库设计
- CI/CD 集成:优秀的 GitHub Actions 支持
最小配置 #
{
"$schema": "https://unpkg.com/@changesets/config@3.0.0/schema.json",
"changelog": "@changesets/cli/changelog",
"commit": false,
"access": "public",
"baseBranch": "main",
"updateInternalDependencies": "patch"
}推荐工作流 #
1. 开发功能
↓
2. npx changeset(添加变更记录)
↓
3. 提交 PR(包含 changeset 文件)
↓
4. 合并 PR
↓
5. CI 自动创建版本更新 PR
↓
6. Review 版本 PR
↓
7. 合并版本 PR
↓
8. CI 自动发布到 npm关键要点 #
- 及时添加 changeset:开发完成后立即添加
- 正确选择版本类型:major/minor/patch
- 写好变更说明:清晰描述改了什么
- 配置 CI/CD:自动化发布流程
- 使用 Changeset Bot:PR 检查
- 合理配置 ignore:排除不需要版本管理的包
学习路径 #
- 基础:理解 semver 和 changeset 概念
- 实践:在项目中添加 changeset
- 进阶:配置 fixed/linked 策略
- 自动化:集成 CI/CD
- 优化:根据团队调整工作流
参考资源 #
🎉 使用 Changesets,让 Monorepo 版本管理变得简单优雅!