Skip to content

Commit fc5419a

Browse files
committed
chore: exclude devbox-shared from npm publishing
1 parent bbfbe93 commit fc5419a

3 files changed

Lines changed: 381 additions & 1 deletion

File tree

.changeset/config.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@
77
"access": "public",
88
"baseBranch": "main",
99
"updateInternalDependencies": "patch",
10-
"ignore": ["devbox-docs"]
10+
"ignore": ["devbox-docs", "devbox-shared"]
1111
}
1212

CHANGESETS_TUTORIAL.md

Lines changed: 379 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,379 @@
1+
# Changesets 快速上手教程
2+
3+
## 📚 什么是 Changesets?
4+
5+
**Changesets** 是一个用于管理 npm 包版本和发布流程的工具,特别适合 monorepo 项目。它帮助你:
6+
7+
-**自动化版本管理** - 根据变更类型(major/minor/patch)自动升级版本号
8+
-**生成 Changelog** - 自动生成发布说明和变更日志
9+
-**批量发布** - 在 monorepo 中管理多个包的版本和发布
10+
-**避免错误** - 防止忘记更新版本号或发布说明
11+
12+
## 🎯 核心概念
13+
14+
### 1. Changeset 文件
15+
16+
一个 changeset 文件描述了你的变更:
17+
18+
```markdown
19+
---
20+
"package-name": minor
21+
---
22+
23+
描述这个变更的内容,会出现在 changelog 中
24+
```
25+
26+
**版本类型:**
27+
- `major` - 重大变更,不向后兼容(1.0.0 → 2.0.0)
28+
- `minor` - 新功能,向后兼容(1.0.0 → 1.1.0)
29+
- `patch` - bug 修复,向后兼容(1.0.0 → 1.0.1)
30+
31+
### 2. 工作流程
32+
33+
```
34+
开发者创建 changeset → 提交到仓库 →
35+
GitHub Action 创建 Release PR → 合并 PR →
36+
自动发布到 npm
37+
```
38+
39+
## 🚀 快速开始
40+
41+
### 步骤 1: 创建 Changeset
42+
43+
当你完成了一些代码变更,准备发布新版本时:
44+
45+
```bash
46+
# 交互式创建 changeset
47+
pnpm changeset
48+
49+
# 或者手动创建文件
50+
```
51+
52+
**交互式流程:**
53+
1. 选择要发布的包(monorepo 中可能有多个包)
54+
2. 选择版本类型(major/minor/patch)
55+
3. 输入变更描述
56+
57+
### 步骤 2: 查看 Changeset 文件
58+
59+
创建后会在 `.changeset/` 目录下生成一个文件,例如:
60+
61+
```markdown
62+
---
63+
"devbox-sdk": minor
64+
"devbox-shared": minor
65+
---
66+
67+
添加了新的文件操作 API
68+
69+
- 新增批量上传功能
70+
- 支持文件监听
71+
- 优化了错误处理
72+
```
73+
74+
### 步骤 3: 提交 Changeset
75+
76+
```bash
77+
git add .changeset/
78+
git commit -m "chore: add changeset for new features"
79+
git push
80+
```
81+
82+
### 步骤 4: 自动创建 Release PR
83+
84+
当你推送代码到 `main` 分支后:
85+
86+
1. **GitHub Action 自动运行**
87+
- 检测到新的 changeset 文件
88+
- 运行 `changeset version` 更新版本号
89+
- 生成 changelog
90+
- 创建 Release PR
91+
92+
2. **Review Release PR**
93+
- 检查版本号是否正确
94+
- 检查 changelog 内容
95+
- 确认要发布的包
96+
97+
3. **合并 Release PR**
98+
- 合并后自动触发发布流程
99+
- 运行 `changeset publish` 发布到 npm
100+
101+
## 📝 实际示例
102+
103+
### 示例 1: 添加新功能(Minor 版本)
104+
105+
```bash
106+
# 1. 创建 changeset
107+
pnpm changeset
108+
# 选择: devbox-sdk
109+
# 选择: minor
110+
# 输入: "添加文件监听功能"
111+
112+
# 2. 提交
113+
git add .changeset/
114+
git commit -m "feat: add file watching"
115+
git push
116+
117+
# 3. 等待 GitHub Action 创建 Release PR
118+
# 4. 合并 Release PR → 自动发布到 npm
119+
```
120+
121+
### 示例 2: Bug 修复(Patch 版本)
122+
123+
```bash
124+
# 1. 创建 changeset
125+
pnpm changeset
126+
# 选择: devbox-sdk
127+
# 选择: patch
128+
# 输入: "修复文件上传超时问题"
129+
130+
# 2. 提交并推送
131+
git add .changeset/
132+
git commit -m "fix: file upload timeout"
133+
git push
134+
```
135+
136+
### 示例 3: 重大变更(Major 版本)
137+
138+
```bash
139+
# 1. 创建 changeset
140+
pnpm changeset
141+
# 选择: devbox-sdk
142+
# 选择: major
143+
# 输入: "重构 API,移除废弃方法"
144+
145+
# 2. 提交并推送
146+
git add .changeset/
147+
git commit -m "refactor: breaking API changes"
148+
git push
149+
```
150+
151+
## 🔧 项目配置
152+
153+
### 配置文件:`.changeset/config.json`
154+
155+
```json
156+
{
157+
"$schema": "https://unpkg.com/@changesets/config@3.0.0/schema.json",
158+
"changelog": ["@changesets/changelog-github", { "repo": "zjy365/devbox-sdk" }],
159+
"commit": false,
160+
"fixed": [],
161+
"linked": [],
162+
"access": "public",
163+
"baseBranch": "main",
164+
"updateInternalDependencies": "patch",
165+
"ignore": ["devbox-docs"]
166+
}
167+
```
168+
169+
**配置说明:**
170+
- `changelog`: 使用 GitHub 生成 changelog
171+
- `access`: npm 包访问权限(public/restricted)
172+
- `baseBranch`: 基础分支名称
173+
- `ignore`: 忽略的包(不发布)
174+
175+
### GitHub Workflow
176+
177+
`.github/workflows/release.yml` 配置了自动发布流程:
178+
179+
```yaml
180+
- name: Create Release Pull Request or Publish to npm
181+
uses: changesets/action@v1
182+
with:
183+
publish: pnpm run release # 发布命令
184+
version: pnpm run version # 版本更新命令
185+
env:
186+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
187+
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} # 需要配置!
188+
```
189+
190+
## 📦 在 Monorepo 中使用
191+
192+
### 多包发布
193+
194+
如果你的 monorepo 有多个包:
195+
196+
```markdown
197+
---
198+
"devbox-sdk": minor
199+
"devbox-shared": patch
200+
---
201+
202+
同时更新两个包
203+
```
204+
205+
### 内部依赖
206+
207+
`devbox-sdk` 依赖 `devbox-shared` 时:
208+
- 如果 `devbox-shared` 有变更,`devbox-sdk` 会自动更新依赖版本
209+
- 配置 `updateInternalDependencies: "patch"` 控制更新策略
210+
211+
## 🎨 最佳实践
212+
213+
### 1. 及时创建 Changeset
214+
215+
完成功能后立即创建 changeset,不要等到发布前:
216+
217+
```bash
218+
# ✅ 好的做法
219+
git add src/
220+
git commit -m "feat: add new API"
221+
pnpm changeset # 立即创建
222+
git add .changeset/
223+
git commit -m "chore: add changeset"
224+
git push
225+
226+
# ❌ 不好的做法
227+
# 等到要发布时才创建所有 changeset
228+
```
229+
230+
### 2. 清晰的变更描述
231+
232+
```markdown
233+
# ✅ 好的描述
234+
添加了文件监听功能,支持实时监控文件变化
235+
236+
# ❌ 不好的描述
237+
更新
238+
```
239+
240+
### 3. 版本类型选择
241+
242+
- **Major**: API 破坏性变更、移除功能
243+
- **Minor**: 新功能、新 API、向后兼容的增强
244+
- **Patch**: Bug 修复、文档更新、性能优化
245+
246+
### 4. 批量变更
247+
248+
如果多个包需要同时发布:
249+
250+
```markdown
251+
---
252+
"devbox-sdk": minor
253+
"devbox-shared": minor
254+
---
255+
256+
统一升级到 1.1.0 版本
257+
```
258+
259+
## 🧪 发布测试版本(Beta/RC)
260+
261+
如果你想在正式发布前测试包,可以使用 npm 的 `dist-tag` 功能:
262+
263+
### 方法 1: 手动发布测试版本
264+
265+
```bash
266+
# 1. 更新版本号(但不发布)
267+
pnpm changeset version
268+
269+
# 2. 构建项目
270+
pnpm build
271+
272+
# 3. 发布到 beta tag
273+
cd packages/sdk
274+
npm publish --tag beta
275+
276+
# 4. 安装测试版本
277+
npm install devbox-sdk@beta
278+
```
279+
280+
### 方法 2: 使用预发布版本号
281+
282+
在 changeset 文件中,你可以指定预发布版本:
283+
284+
```markdown
285+
---
286+
"devbox-sdk": prerelease
287+
---
288+
289+
测试版本,用于验证新功能
290+
```
291+
292+
### 方法 3: 修改 package.json 版本
293+
294+
```bash
295+
# 手动修改版本为 beta
296+
# packages/sdk/package.json
297+
{
298+
"version": "1.1.0-beta.1"
299+
}
300+
301+
# 发布
302+
npm publish --tag beta
303+
```
304+
305+
### 安装测试版本
306+
307+
```bash
308+
# 安装 beta 版本
309+
npm install devbox-sdk@beta
310+
311+
# 或指定具体版本
312+
npm install devbox-sdk@1.1.0-beta.1
313+
```
314+
315+
## 🐛 常见问题
316+
317+
### Q: Release PR 没有自动创建?
318+
319+
**A:** 检查:
320+
1. GitHub Action 是否运行
321+
2. `.changeset/` 目录下是否有 changeset 文件
322+
3. 是否推送到 `main` 分支
323+
324+
### Q: 发布失败?
325+
326+
**A:** 检查:
327+
1. `NPM_TOKEN` secret 是否配置
328+
2. npm 账号是否有发布权限
329+
3. 包名是否已存在且你有权限
330+
331+
### Q: 想撤销 changeset?
332+
333+
**A:** 删除对应的 changeset 文件:
334+
335+
```bash
336+
rm .changeset/your-changeset.md
337+
git add .changeset/
338+
git commit -m "chore: remove changeset"
339+
git push
340+
```
341+
342+
### Q: 想修改已创建的 changeset?
343+
344+
**A:** 直接编辑 changeset 文件:
345+
346+
```bash
347+
# 编辑文件
348+
vim .changeset/your-changeset.md
349+
350+
# 提交修改
351+
git add .changeset/
352+
git commit -m "chore: update changeset"
353+
git push
354+
```
355+
356+
### Q: 如何在发布前测试包?
357+
358+
**A:** 有几种方式:
359+
1. **本地测试**: 使用 `pnpm link` 在本地链接包
360+
2. **Beta 发布**: 发布到 `beta` tag,然后安装测试
361+
3. **CI 测试**: 在 CI 中运行测试,确保通过后再合并 Release PR
362+
363+
## 📚 更多资源
364+
365+
- [Changesets 官方文档](https://github.com/changesets/changesets)
366+
- [Changesets GitHub Action](https://github.com/changesets/action)
367+
- [Semantic Versioning](https://semver.org/)
368+
369+
## 🎯 总结
370+
371+
Changesets 让版本管理变得简单:
372+
373+
1. **创建 changeset** → 描述你的变更
374+
2. **提交代码** → 推送到仓库
375+
3. **自动创建 PR** → GitHub Action 处理
376+
4. **合并 PR** → 自动发布到 npm
377+
378+
就是这么简单!🚀
379+

packages/shared/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"name": "devbox-shared",
33
"version": "1.1.0",
44
"description": "Shared types, errors, and utilities for Sealos Devbox SDK",
5+
"private": true,
56
"type": "module",
67
"exports": {
78
"./errors": {

0 commit comments

Comments
 (0)