@mznjs/mbump 2.0.2 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +30 -0
- package/README.md +192 -239
- package/dist/{VersionManager-DSOVXsFt.js → VersionManager-CwsuNWyP.js} +26 -12
- package/dist/VersionManager-CwsuNWyP.js.map +1 -0
- package/dist/cli.js +171 -49
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/package.json +3 -3
- package/dist/VersionManager-DSOVXsFt.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,36 @@
|
|
|
5
5
|
格式遵循 [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
本项目遵循 [语义化版本](https://semver.org/lang/zh-CN/)。
|
|
7
7
|
|
|
8
|
+
## [2.1.0] - 2026-07-04
|
|
9
|
+
|
|
10
|
+
🚀 新增功能
|
|
11
|
+
|
|
12
|
+
- feat(cli): 优化路径支持与命令行参数,新增更多路径格式和快捷参数 (README.md, index.ts, parser.ts)
|
|
13
|
+
|
|
14
|
+
## [2.0.4] - 2026-07-04
|
|
15
|
+
|
|
16
|
+
🚀 新增功能
|
|
17
|
+
|
|
18
|
+
- feat(cli): 新增--version/-V参数用于显示版本信息 (index.ts, parser.ts, index.ts)
|
|
19
|
+
|
|
20
|
+
## [2.0.4-beta.1] - 2026-07-04
|
|
21
|
+
|
|
22
|
+
♻️ 代码重构
|
|
23
|
+
|
|
24
|
+
- refactor(cli): 重构参数解析和配置加载逻辑 (index.ts)
|
|
25
|
+
|
|
26
|
+
## [2.0.4-beta.0] - 2026-07-04
|
|
27
|
+
|
|
28
|
+
🚀 新增功能
|
|
29
|
+
|
|
30
|
+
- feat(cli): 新增路径模式支持,允许直接指定项目目录更新版本 (README.md, index.ts, parser.ts, index.ts)
|
|
31
|
+
|
|
32
|
+
## [2.0.3] - 2026-07-04
|
|
33
|
+
|
|
34
|
+
♻️ 代码重构
|
|
35
|
+
|
|
36
|
+
- refactor(config,cli): 重构包路径处理逻辑,新增路径校验 (package.json, index.ts, loader.ts, VersionManager.ts, integration.test.ts)
|
|
37
|
+
|
|
8
38
|
## [2.0.2] - 2026-05-26
|
|
9
39
|
|
|
10
40
|
🔧 工具变更
|
package/README.md
CHANGED
|
@@ -18,18 +18,45 @@
|
|
|
18
18
|
- ✅ 智能配置加载(支持异步/同步)
|
|
19
19
|
- ✅ 未提交更改检测与处理
|
|
20
20
|
- ✅ 详细日志输出模式
|
|
21
|
+
- ✅ **零配置启动** - 无需配置文件即可使用
|
|
21
22
|
|
|
22
23
|
## 📦 安装
|
|
23
24
|
|
|
25
|
+
### 全局安装(推荐)
|
|
26
|
+
|
|
27
|
+
适合在多个项目中使用,一次安装,全局可用:
|
|
28
|
+
|
|
24
29
|
```bash
|
|
25
30
|
npm install -g @mznjs/mbump
|
|
26
31
|
# 或
|
|
27
32
|
pnpm add -g @mznjs/mbump
|
|
28
33
|
```
|
|
29
34
|
|
|
35
|
+
**全局安装特性**:
|
|
36
|
+
- ✅ 所有依赖(包括 `tsx`)已移至 `dependencies`,确保全局安装后正常工作
|
|
37
|
+
- ✅ 支持 `.ts` 配置文件的自动编译
|
|
38
|
+
- ✅ 可在任意项目目录下使用
|
|
39
|
+
|
|
40
|
+
### 本地安装
|
|
41
|
+
|
|
42
|
+
适合在单个项目中使用,作为开发依赖:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
npm install @mznjs/mbump -D
|
|
46
|
+
# 或
|
|
47
|
+
pnpm add @mznjs/mbump -D
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**本地安装特性**:
|
|
51
|
+
- ✅ 项目级依赖,不影响全局环境
|
|
52
|
+
- ✅ 可在 `package.json` 的 `scripts` 中使用
|
|
53
|
+
- ✅ 推荐在 CI/CD 流程中使用
|
|
54
|
+
|
|
30
55
|
## 🚀 快速开始
|
|
31
56
|
|
|
32
|
-
###
|
|
57
|
+
### 单包项目(零配置)
|
|
58
|
+
|
|
59
|
+
无需任何配置文件,mbump 会自动使用默认配置 `{ default: 'package.json' }`:
|
|
33
60
|
|
|
34
61
|
```bash
|
|
35
62
|
# 升级补丁版本
|
|
@@ -45,9 +72,59 @@ mbump major
|
|
|
45
72
|
mbump
|
|
46
73
|
```
|
|
47
74
|
|
|
75
|
+
**零配置行为**:
|
|
76
|
+
- ✅ 自动识别当前目录的 `package.json`
|
|
77
|
+
- ✅ 使用 `default` 作为包名
|
|
78
|
+
- ✅ 创建 Git Tag:`v{version}`(如 `v1.0.1`)
|
|
79
|
+
- ✅ 生成 CHANGELOG.md
|
|
80
|
+
|
|
81
|
+
### 路径模式(直接指定项目目录)
|
|
82
|
+
|
|
83
|
+
无需配置文件,直接指定项目目录路径,mbump 会自动查找该目录下的 `package.json`:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
# 更新指定目录下的 package.json(默认 patch)
|
|
87
|
+
mbump ./packages/my-pkg
|
|
88
|
+
|
|
89
|
+
# 指定版本类型
|
|
90
|
+
mbump ./packages/my-pkg patch
|
|
91
|
+
mbump ./packages/my-pkg minor
|
|
92
|
+
mbump ./packages/my-pkg major
|
|
93
|
+
|
|
94
|
+
# 使用上级目录
|
|
95
|
+
mbump ../other-project
|
|
96
|
+
|
|
97
|
+
# 使用绝对路径
|
|
98
|
+
mbump /path/to/project
|
|
99
|
+
mbump C:\projects\my-app
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
**支持的路径格式**:
|
|
103
|
+
|
|
104
|
+
| 格式类型 | 示例 | 说明 |
|
|
105
|
+
|----------|------|------|
|
|
106
|
+
| Unix 相对路径 | `./packages/theme` | 以 `./` 开头 |
|
|
107
|
+
| Windows 相对路径 | `.\frontend` | 以 `.\` 开头 |
|
|
108
|
+
| 当前目录 | `.` | 单个点 |
|
|
109
|
+
| 上级目录 | `../other-project` | 以 `../` 或 `..\` 开头 |
|
|
110
|
+
| 简单目录名 | `frontend` | 直接使用目录名(会自动检测) |
|
|
111
|
+
| Unix 绝对路径 | `/usr/local/project` | 以 `/` 开头 |
|
|
112
|
+
| Windows 绝对路径 | `\Windows\System32` | 以 `\` 开头 |
|
|
113
|
+
| Windows 驱动器 | `C:\Projects\app` | 驱动器字母 + `:\` |
|
|
114
|
+
| 用户主目录 | `~/projects/my-app` | 以 `~` 开头 |
|
|
115
|
+
| UNC 网络路径 | `\\server\share\project` | 以 `\\` 开头 |
|
|
116
|
+
|
|
117
|
+
**路径模式特性**:
|
|
118
|
+
- ✅ 支持多种路径格式(相对路径、绝对路径、驱动器路径、UNC 路径等)
|
|
119
|
+
- ✅ 自动检测路径下是否存在 `package.json`
|
|
120
|
+
- ✅ 使用默认配置 `{ default: 'package.json' }`
|
|
121
|
+
- ✅ 支持所有命令行选项(`--dry-run`, `--verbose`, `--npm` 等)
|
|
122
|
+
- ✅ 适合快速更新独立的子包或临时项目
|
|
123
|
+
- ✅ 智能回退:如果包名在配置中找不到,会自动检查是否为有效目录路径
|
|
124
|
+
|
|
48
125
|
### Monorepo 项目
|
|
49
126
|
|
|
50
|
-
创建配置文件 `.mbump.config.json
|
|
127
|
+
创建配置文件 `.mbump.config.json`(或其他支持的格式):
|
|
51
128
|
|
|
52
129
|
```json
|
|
53
130
|
{
|
|
@@ -59,6 +136,11 @@ mbump
|
|
|
59
136
|
}
|
|
60
137
|
```
|
|
61
138
|
|
|
139
|
+
**重要特性**:
|
|
140
|
+
- ✅ **默认包始终保留**:即使配置了 `packagePaths`,`default` 键(指向根目录 `package.json`)仍然会被保留
|
|
141
|
+
- ✅ **路径解析基准**:相对路径相对于配置文件所在目录解析,而非当前工作目录
|
|
142
|
+
- ✅ **统一路径处理**:配置中的路径在加载时会自动解析为绝对路径
|
|
143
|
+
|
|
62
144
|
```bash
|
|
63
145
|
# 更新所有包(交互式选择每个包的版本)
|
|
64
146
|
mbump all
|
|
@@ -66,6 +148,9 @@ mbump all
|
|
|
66
148
|
# 更新指定包
|
|
67
149
|
mbump components minor
|
|
68
150
|
|
|
151
|
+
# 更新根目录包
|
|
152
|
+
mbump default patch
|
|
153
|
+
|
|
69
154
|
# 试运行模式(不实际执行)
|
|
70
155
|
mbump components minor --dry-run
|
|
71
156
|
|
|
@@ -76,10 +161,11 @@ mbump components patch --npm
|
|
|
76
161
|
## 💻 命令行参数
|
|
77
162
|
|
|
78
163
|
```
|
|
79
|
-
用法: mbump [package] [type] [options]
|
|
164
|
+
用法: mbump [package|path] [type] [options]
|
|
80
165
|
|
|
81
166
|
参数:
|
|
82
167
|
[package] 要更新的包名称或 "all" 更新所有包
|
|
168
|
+
[path] 项目目录路径(支持 ./path, ../path, /path, C:\path),自动查找该目录下的 package.json
|
|
83
169
|
[type] 版本升级类型: major, minor, patch, pre-patch, pre-minor, pre-major
|
|
84
170
|
|
|
85
171
|
选项:
|
|
@@ -88,8 +174,9 @@ mbump components patch --npm
|
|
|
88
174
|
--no-commit, -n 禁用自动git提交
|
|
89
175
|
--no-push, -p 禁用自动推送到远程仓库
|
|
90
176
|
--allow-uncommitted, -u 允许在有未提交更改的情况下继续操作
|
|
91
|
-
--npm
|
|
92
|
-
--show-config
|
|
177
|
+
--npm, -N 启用npm/pnpm包发布功能(默认不发布)
|
|
178
|
+
--show-config, -c 显示当前加载的完整配置信息
|
|
179
|
+
--version, -V 显示当前版本号
|
|
93
180
|
--help, -h 显示此帮助信息
|
|
94
181
|
|
|
95
182
|
示例:
|
|
@@ -100,6 +187,17 @@ mbump components patch --npm
|
|
|
100
187
|
mbump components patch --npm # 更新版本并发布到npm/pnpm
|
|
101
188
|
mbump # 交互式选择包和版本类型
|
|
102
189
|
mbump --show-config # 查看当前配置
|
|
190
|
+
mbump --version # 查看当前版本号
|
|
191
|
+
|
|
192
|
+
# 路径模式
|
|
193
|
+
mbump ./packages/my-pkg # 更新 ./packages/my-pkg 目录下的 package.json
|
|
194
|
+
mbump ./packages/my-pkg patch # 指定版本类型
|
|
195
|
+
mbump ../other-project minor # 更新上级目录的项目
|
|
196
|
+
mbump /path/to/project major # 使用绝对路径
|
|
197
|
+
mbump ./packages/my-pkg --dry-run # 试运行模式
|
|
198
|
+
mbump .\frontend\ # Windows 风格路径(PowerShell)
|
|
199
|
+
mbump frontend # 直接使用目录名(自动检测)
|
|
200
|
+
mbump ~/projects/my-app # 使用用户主目录路径
|
|
103
201
|
```
|
|
104
202
|
|
|
105
203
|
## ⚙️ 配置文件
|
|
@@ -286,7 +384,35 @@ export default () => ({
|
|
|
286
384
|
|
|
287
385
|
| 选项 | 类型 | 默认值 | 说明 |
|
|
288
386
|
|------|------|--------|------|
|
|
289
|
-
| `packagePaths` | `Record<string, string>` | `{ default: 'package.json' }` |
|
|
387
|
+
| `packagePaths` | `Record<string, string>` | `{ default: 'package.json' }` | 包路径映射,相对路径相对于配置文件所在目录解析 |
|
|
388
|
+
|
|
389
|
+
**packagePaths 配置说明**:
|
|
390
|
+
|
|
391
|
+
1. **默认配置**:即使不配置 `packagePaths`,系统也会自动使用 `{ default: 'package.json' }`
|
|
392
|
+
2. **默认包保留**:用户配置 `packagePaths` 时,`default` 键始终会被保留,指向根目录的 `package.json`
|
|
393
|
+
3. **路径解析基准**:相对路径相对于配置文件所在目录解析,而非 `process.cwd()`
|
|
394
|
+
4. **示例**:
|
|
395
|
+
```typescript
|
|
396
|
+
// .mbump.config.ts(位于项目根目录)
|
|
397
|
+
export default {
|
|
398
|
+
packagePaths: {
|
|
399
|
+
theme: 'packages/theme/package.json', // 解析为 /project/packages/theme/package.json
|
|
400
|
+
web: 'packages/web/package.json', // 解析为 /project/packages/web/package.json
|
|
401
|
+
utils: 'plugins/utils/package.json', // 解析为 /project/plugins/utils/package.json
|
|
402
|
+
core: 'plugins/core/package.json', // 解析为 /project/plugins/core/package.json
|
|
403
|
+
},
|
|
404
|
+
} satisfies Config
|
|
405
|
+
```
|
|
406
|
+
最终合并后的配置会包含:
|
|
407
|
+
```typescript
|
|
408
|
+
{
|
|
409
|
+
default: '/project/package.json', // 自动保留
|
|
410
|
+
theme: '/project/packages/theme/package.json',
|
|
411
|
+
web: '/project/packages/web/package.json',
|
|
412
|
+
utils: '/project/plugins/utils/package.json',
|
|
413
|
+
core: '/project/plugins/core/package.json',
|
|
414
|
+
}
|
|
415
|
+
```
|
|
290
416
|
|
|
291
417
|
#### defaults 选项
|
|
292
418
|
|
|
@@ -317,12 +443,12 @@ mbump 根据包的类型采用不同的 Tag 命名策略:
|
|
|
317
443
|
- **Tag 格式**: `{tagPrefix}{version}`
|
|
318
444
|
- **使用前缀**: 是(默认 `v`)
|
|
319
445
|
- **识别条件**: 包名为 `default` 或包路径为 `package.json`(根目录)
|
|
320
|
-
- **示例**:
|
|
446
|
+
- **示例**:
|
|
321
447
|
```bash
|
|
322
448
|
mbump default patch
|
|
323
449
|
# 假设 package.json 中 "name": "@my-org/monorepo"
|
|
324
450
|
# → 创建 Tag: v1.0.1
|
|
325
|
-
|
|
451
|
+
|
|
326
452
|
# 自定义前缀
|
|
327
453
|
mbump default minor
|
|
328
454
|
# 如果配置 git.tagPrefix = "release-"
|
|
@@ -332,7 +458,7 @@ mbump 根据包的类型采用不同的 Tag 命名策略:
|
|
|
332
458
|
#### 子包 (所有非主项目包)
|
|
333
459
|
- **Tag 格式**: `{package-name}@{version}`
|
|
334
460
|
- **不使用前缀**: 直接使用 package.json 中的 `name` 字段
|
|
335
|
-
- **适用场景**:
|
|
461
|
+
- **适用场景**:
|
|
336
462
|
- 单独更新子包:`mbump components patch`
|
|
337
463
|
- 批量更新所有包:`mbump all`
|
|
338
464
|
- **示例**:
|
|
@@ -340,7 +466,7 @@ mbump 根据包的类型采用不同的 Tag 命名策略:
|
|
|
340
466
|
mbump components patch
|
|
341
467
|
# 假设 components/package.json 中 "name": "@my-org/components"
|
|
342
468
|
# → 创建 Tag: @my-org/components@1.0.1
|
|
343
|
-
|
|
469
|
+
|
|
344
470
|
mbump cli minor
|
|
345
471
|
# 假设 cli/package.json 中 "name": "@my-org/cli"
|
|
346
472
|
# → 创建 Tag: @my-org/cli@2.3.0
|
|
@@ -420,6 +546,15 @@ mbump components patch --changelog
|
|
|
420
546
|
|
|
421
547
|
#### 单包项目
|
|
422
548
|
|
|
549
|
+
无需配置文件,直接使用默认配置:
|
|
550
|
+
|
|
551
|
+
```bash
|
|
552
|
+
# 直接使用,自动识别当前目录的 package.json
|
|
553
|
+
mbump patch
|
|
554
|
+
```
|
|
555
|
+
|
|
556
|
+
如果需要自定义配置:
|
|
557
|
+
|
|
423
558
|
```json
|
|
424
559
|
{
|
|
425
560
|
"packagePaths": {
|
|
@@ -768,6 +903,23 @@ mbump 提供了友好的错误提示信息,帮助用户快速理解和解决
|
|
|
768
903
|
- 检查 `.mbump.config.js` 中的 `packagePaths` 配置
|
|
769
904
|
- 确保包名与配置中的 key 一致
|
|
770
905
|
|
|
906
|
+
#### 8. 包路径不存在
|
|
907
|
+
|
|
908
|
+
**错误信息**:
|
|
909
|
+
```
|
|
910
|
+
配置错误:以下包路径指向的文件不存在
|
|
911
|
+
- components: "packages/components/package.json" -> 解析为 "/path/to/project/packages/components/package.json"(文件不存在)
|
|
912
|
+
|
|
913
|
+
请检查配置文件中的 packagePaths 是否正确
|
|
914
|
+
```
|
|
915
|
+
|
|
916
|
+
**原因**:配置文件中指定的 package.json 文件不存在
|
|
917
|
+
|
|
918
|
+
**解决方案**:
|
|
919
|
+
- 检查路径是否正确
|
|
920
|
+
- 确保文件已创建
|
|
921
|
+
- 相对路径是相对于配置文件所在目录解析的
|
|
922
|
+
|
|
771
923
|
### 调试模式
|
|
772
924
|
|
|
773
925
|
如果遇到未知错误,可以使用 `DEBUG` 环境变量查看详细信息:
|
|
@@ -1047,7 +1199,6 @@ setInterval(() => {
|
|
|
1047
1199
|
// CI/CD 环境中可以禁用缓存(每次都是全新环境)
|
|
1048
1200
|
const manager = new VersionManager({
|
|
1049
1201
|
rootDir,
|
|
1050
|
-
// 未来可以添加配置选项
|
|
1051
1202
|
})
|
|
1052
1203
|
```
|
|
1053
1204
|
|
|
@@ -1172,7 +1323,6 @@ pnpm test:watch
|
|
|
1172
1323
|
beforeEach(() => {
|
|
1173
1324
|
tempDir = join(os.tmpdir(), `mbump-test-${Date.now()}`)
|
|
1174
1325
|
mkdirSync(tempDir, { recursive: true })
|
|
1175
|
-
// 初始化 Git 仓库...
|
|
1176
1326
|
})
|
|
1177
1327
|
|
|
1178
1328
|
afterEach(() => {
|
|
@@ -1191,78 +1341,12 @@ afterEach(() => {
|
|
|
1191
1341
|
#### 3. 真实场景
|
|
1192
1342
|
使用真实的 Git 命令和文件系统操作:
|
|
1193
1343
|
```typescript
|
|
1194
|
-
// 初始化 Git 仓库
|
|
1195
1344
|
execSync('git init', { cwd: tempDir })
|
|
1196
1345
|
execSync('git config user.email "test@example.com"', { cwd: tempDir })
|
|
1197
|
-
|
|
1198
|
-
// 创建 commits
|
|
1199
1346
|
execSync('git add . && git commit -m "feat: feature"', { cwd: tempDir })
|
|
1200
|
-
|
|
1201
|
-
// 验证 Git Tag
|
|
1202
1347
|
const tags = execSync('git tag', { cwd: tempDir, encoding: 'utf8' })
|
|
1203
1348
|
```
|
|
1204
1349
|
|
|
1205
|
-
### 测试示例
|
|
1206
|
-
|
|
1207
|
-
#### 单包更新测试
|
|
1208
|
-
```typescript
|
|
1209
|
-
it('应该成功更新单个包的版本号', async () => {
|
|
1210
|
-
createPackageFile('test-package', '1.0.0')
|
|
1211
|
-
createConfigFile({ default: 'package.json' })
|
|
1212
|
-
createInitialCommit()
|
|
1213
|
-
|
|
1214
|
-
const manager = new VersionManager({ rootDir: tempDir })
|
|
1215
|
-
const result = await manager.updateVersion('default', 'minor', {
|
|
1216
|
-
dryRun: false,
|
|
1217
|
-
autoCommit: true,
|
|
1218
|
-
npm: false,
|
|
1219
|
-
changelog: false,
|
|
1220
|
-
})
|
|
1221
|
-
|
|
1222
|
-
expect(result.success).toBe(true)
|
|
1223
|
-
expect(result.updatedPackages[0].newVersion).toBe('1.1.0')
|
|
1224
|
-
|
|
1225
|
-
const pkgContent = JSON.parse(readFileSync(join(tempDir, 'package.json'), 'utf8'))
|
|
1226
|
-
expect(pkgContent.version).toBe('1.1.0')
|
|
1227
|
-
})
|
|
1228
|
-
```
|
|
1229
|
-
|
|
1230
|
-
#### Git Tag 测试
|
|
1231
|
-
```typescript
|
|
1232
|
-
it('应该在版本更新后创建 Git Tag', async () => {
|
|
1233
|
-
createPackageFile('test-package', '1.0.0')
|
|
1234
|
-
createConfigFile({ default: 'package.json' })
|
|
1235
|
-
createInitialCommit()
|
|
1236
|
-
|
|
1237
|
-
const manager = new VersionManager({ rootDir: tempDir })
|
|
1238
|
-
await manager.updateVersion('default', 'minor', {
|
|
1239
|
-
dryRun: false,
|
|
1240
|
-
autoCommit: true,
|
|
1241
|
-
npm: false,
|
|
1242
|
-
changelog: false,
|
|
1243
|
-
tag: true,
|
|
1244
|
-
})
|
|
1245
|
-
|
|
1246
|
-
const tags = execSync('git tag', { cwd: tempDir, encoding: 'utf8' }).trim().split('\n')
|
|
1247
|
-
expect(tags).toContain('v1.1.0')
|
|
1248
|
-
})
|
|
1249
|
-
```
|
|
1250
|
-
|
|
1251
|
-
#### 缓存机制测试
|
|
1252
|
-
```typescript
|
|
1253
|
-
it('应该预加载包信息到缓存', () => {
|
|
1254
|
-
createPackageFile('test-package', '1.0.0')
|
|
1255
|
-
createConfigFile({ default: 'package.json' })
|
|
1256
|
-
createInitialCommit()
|
|
1257
|
-
|
|
1258
|
-
const manager = new VersionManager({ rootDir: tempDir })
|
|
1259
|
-
const stats = manager.getCacheStats()
|
|
1260
|
-
|
|
1261
|
-
expect(stats.size).toBeGreaterThan(0)
|
|
1262
|
-
expect(stats.packages).toContain(join(tempDir, 'package.json'))
|
|
1263
|
-
})
|
|
1264
|
-
```
|
|
1265
|
-
|
|
1266
1350
|
### 持续集成
|
|
1267
1351
|
|
|
1268
1352
|
测试已集成到 CI/CD 流程中,每次提交都会自动运行:
|
|
@@ -1290,155 +1374,6 @@ it('应该预加载包信息到缓存', () => {
|
|
|
1290
1374
|
- **conventional**: 根据 commits 自动生成版本类型
|
|
1291
1375
|
- **as-is**: 保持当前版本不变(仅更新 CHANGELOG)
|
|
1292
1376
|
|
|
1293
|
-
## 🧪 测试
|
|
1294
|
-
|
|
1295
|
-
mbump 拥有完善的测试体系,包括单元测试和集成测试,确保代码质量和功能稳定性。
|
|
1296
|
-
|
|
1297
|
-
### 测试覆盖范围
|
|
1298
|
-
|
|
1299
|
-
#### 单元测试 (Unit Tests)
|
|
1300
|
-
- ✅ **版本计算**:验证 semver 版本递增逻辑
|
|
1301
|
-
- ✅ **安全检查**:验证路径遍历防护、命令注入防护
|
|
1302
|
-
- ✅ **工具函数**:验证各种辅助函数的正确性
|
|
1303
|
-
|
|
1304
|
-
#### 集成测试 (Integration Tests)
|
|
1305
|
-
- ✅ **单包版本更新**:验证单个包的版本号更新流程
|
|
1306
|
-
- ✅ **批量版本更新**:验证多个包同时更新的场景
|
|
1307
|
-
- ✅ **CHANGELOG 生成**:验证 CHANGELOG.md 文件的创建和内容
|
|
1308
|
-
- ✅ **Git Tag 管理**:验证 Git 标签的创建、前缀配置等
|
|
1309
|
-
- ✅ **Dry-run 模式**:验证试运行模式不修改文件
|
|
1310
|
-
- ✅ **缓存机制**:验证配置缓存和包信息缓存
|
|
1311
|
-
- ✅ **错误处理**:验证无效包名、版本冲突等异常场景
|
|
1312
|
-
|
|
1313
|
-
### 运行测试
|
|
1314
|
-
|
|
1315
|
-
```bash
|
|
1316
|
-
# 运行所有测试
|
|
1317
|
-
pnpm test
|
|
1318
|
-
|
|
1319
|
-
# 运行特定测试文件
|
|
1320
|
-
pnpm test tests/integration.test.ts
|
|
1321
|
-
|
|
1322
|
-
# 监听模式(开发时使用)
|
|
1323
|
-
pnpm test:watch
|
|
1324
|
-
```
|
|
1325
|
-
|
|
1326
|
-
### 测试统计
|
|
1327
|
-
|
|
1328
|
-
| 测试类型 | 测试文件数 | 测试用例数 | 通过率 |
|
|
1329
|
-
|---------|-----------|-----------|--------|
|
|
1330
|
-
| 单元测试 | 2 | 12 | 100% ✅ |
|
|
1331
|
-
| 集成测试 | 1 | 16 | 100% ✅ |
|
|
1332
|
-
| **总计** | **3** | **28** | **100%** ✅ |
|
|
1333
|
-
|
|
1334
|
-
### 集成测试特点
|
|
1335
|
-
|
|
1336
|
-
#### 1. 隔离环境
|
|
1337
|
-
每个测试在临时目录中执行,避免污染真实项目:
|
|
1338
|
-
```typescript
|
|
1339
|
-
beforeEach(() => {
|
|
1340
|
-
tempDir = join(os.tmpdir(), `mbump-test-${Date.now()}`)
|
|
1341
|
-
mkdirSync(tempDir, { recursive: true })
|
|
1342
|
-
// 初始化 Git 仓库...
|
|
1343
|
-
})
|
|
1344
|
-
|
|
1345
|
-
afterEach(() => {
|
|
1346
|
-
rmSync(tempDir, { recursive: true, force: true })
|
|
1347
|
-
})
|
|
1348
|
-
```
|
|
1349
|
-
|
|
1350
|
-
#### 2. 完整工作流
|
|
1351
|
-
测试完整的版本更新流程:
|
|
1352
|
-
- 创建临时 Git 仓库
|
|
1353
|
-
- 创建 package.json 和配置文件
|
|
1354
|
-
- 执行版本更新
|
|
1355
|
-
- 验证结果(版本号、Git Tag、CHANGELOG)
|
|
1356
|
-
- 清理临时文件
|
|
1357
|
-
|
|
1358
|
-
#### 3. 真实场景
|
|
1359
|
-
使用真实的 Git 命令和文件系统操作:
|
|
1360
|
-
```typescript
|
|
1361
|
-
// 初始化 Git 仓库
|
|
1362
|
-
execSync('git init', { cwd: tempDir })
|
|
1363
|
-
execSync('git config user.email "test@example.com"', { cwd: tempDir })
|
|
1364
|
-
|
|
1365
|
-
// 创建 commits
|
|
1366
|
-
execSync('git add . && git commit -m "feat: feature"', { cwd: tempDir })
|
|
1367
|
-
|
|
1368
|
-
// 验证 Git Tag
|
|
1369
|
-
const tags = execSync('git tag', { cwd: tempDir, encoding: 'utf8' })
|
|
1370
|
-
```
|
|
1371
|
-
|
|
1372
|
-
### 测试示例
|
|
1373
|
-
|
|
1374
|
-
#### 单包更新测试
|
|
1375
|
-
```typescript
|
|
1376
|
-
it('应该成功更新单个包的版本号', async () => {
|
|
1377
|
-
createPackageFile('test-package', '1.0.0')
|
|
1378
|
-
createConfigFile({ default: 'package.json' })
|
|
1379
|
-
createInitialCommit()
|
|
1380
|
-
|
|
1381
|
-
const manager = new VersionManager({ rootDir: tempDir })
|
|
1382
|
-
const result = await manager.updateVersion('default', 'minor', {
|
|
1383
|
-
dryRun: false,
|
|
1384
|
-
autoCommit: true,
|
|
1385
|
-
npm: false,
|
|
1386
|
-
changelog: false,
|
|
1387
|
-
})
|
|
1388
|
-
|
|
1389
|
-
expect(result.success).toBe(true)
|
|
1390
|
-
expect(result.updatedPackages[0].newVersion).toBe('1.1.0')
|
|
1391
|
-
|
|
1392
|
-
const pkgContent = JSON.parse(readFileSync(join(tempDir, 'package.json'), 'utf8'))
|
|
1393
|
-
expect(pkgContent.version).toBe('1.1.0')
|
|
1394
|
-
})
|
|
1395
|
-
```
|
|
1396
|
-
|
|
1397
|
-
#### Git Tag 测试
|
|
1398
|
-
```typescript
|
|
1399
|
-
it('应该在版本更新后创建 Git Tag', async () => {
|
|
1400
|
-
createPackageFile('test-package', '1.0.0')
|
|
1401
|
-
createConfigFile({ default: 'package.json' })
|
|
1402
|
-
createInitialCommit()
|
|
1403
|
-
|
|
1404
|
-
const manager = new VersionManager({ rootDir: tempDir })
|
|
1405
|
-
await manager.updateVersion('default', 'minor', {
|
|
1406
|
-
dryRun: false,
|
|
1407
|
-
autoCommit: true,
|
|
1408
|
-
npm: false,
|
|
1409
|
-
changelog: false,
|
|
1410
|
-
tag: true,
|
|
1411
|
-
})
|
|
1412
|
-
|
|
1413
|
-
const tags = execSync('git tag', { cwd: tempDir, encoding: 'utf8' }).trim().split('\n')
|
|
1414
|
-
expect(tags).toContain('v1.1.0')
|
|
1415
|
-
})
|
|
1416
|
-
```
|
|
1417
|
-
|
|
1418
|
-
#### 缓存机制测试
|
|
1419
|
-
```typescript
|
|
1420
|
-
it('应该预加载包信息到缓存', () => {
|
|
1421
|
-
createPackageFile('test-package', '1.0.0')
|
|
1422
|
-
createConfigFile({ default: 'package.json' })
|
|
1423
|
-
createInitialCommit()
|
|
1424
|
-
|
|
1425
|
-
const manager = new VersionManager({ rootDir: tempDir })
|
|
1426
|
-
const stats = manager.getCacheStats()
|
|
1427
|
-
|
|
1428
|
-
expect(stats.size).toBeGreaterThan(0)
|
|
1429
|
-
expect(stats.packages).toContain(join(tempDir, 'package.json'))
|
|
1430
|
-
})
|
|
1431
|
-
```
|
|
1432
|
-
|
|
1433
|
-
### 持续集成
|
|
1434
|
-
|
|
1435
|
-
测试已集成到 CI/CD 流程中,每次提交都会自动运行:
|
|
1436
|
-
- ✅ 代码构建
|
|
1437
|
-
- ✅ 类型检查
|
|
1438
|
-
- ✅ ESLint 检查
|
|
1439
|
-
- ✅ 单元测试
|
|
1440
|
-
- ✅ 集成测试
|
|
1441
|
-
|
|
1442
1377
|
## 🎯 使用场景
|
|
1443
1378
|
|
|
1444
1379
|
### 场景 1: 日常开发
|
|
@@ -1478,7 +1413,23 @@ mbump all patch
|
|
|
1478
1413
|
mbump all minor --dry-run
|
|
1479
1414
|
```
|
|
1480
1415
|
|
|
1481
|
-
### 场景 4:
|
|
1416
|
+
### 场景 4: 路径模式(快速更新独立子包)
|
|
1417
|
+
|
|
1418
|
+
```bash
|
|
1419
|
+
# 快速更新指定目录下的 package.json
|
|
1420
|
+
mbump ./packages/my-pkg
|
|
1421
|
+
|
|
1422
|
+
# 指定版本类型
|
|
1423
|
+
mbump ./packages/my-pkg minor
|
|
1424
|
+
|
|
1425
|
+
# 更新上级目录的项目
|
|
1426
|
+
mbump ../other-project
|
|
1427
|
+
|
|
1428
|
+
# 试运行模式
|
|
1429
|
+
mbump ./packages/my-pkg --dry-run
|
|
1430
|
+
```
|
|
1431
|
+
|
|
1432
|
+
### 场景 5: CI/CD 自动化
|
|
1482
1433
|
|
|
1483
1434
|
```bash
|
|
1484
1435
|
# 在 CI 环境中自动发布
|
|
@@ -1509,10 +1460,11 @@ mbump --show-config
|
|
|
1509
1460
|
配置文件: .mbump.config.mjs
|
|
1510
1461
|
|
|
1511
1462
|
📦 包路径:
|
|
1512
|
-
|
|
1513
|
-
|
|
1463
|
+
default: /path/to/project/package.json
|
|
1464
|
+
components: /path/to/project/packages/components/package.json
|
|
1465
|
+
cli: /path/to/project/packages/cli/package.json
|
|
1514
1466
|
|
|
1515
|
-
⚙️
|
|
1467
|
+
⚙️ 默认选项:
|
|
1516
1468
|
releaseType: patch
|
|
1517
1469
|
dryRun: false
|
|
1518
1470
|
verbose: false
|
|
@@ -1699,17 +1651,20 @@ git push --tags
|
|
|
1699
1651
|
|
|
1700
1652
|
1. **Git 要求**: 确保项目在 Git 仓库中,且已配置用户信息
|
|
1701
1653
|
2. **未提交更改**: 默认情况下,存在未提交更改时会提示确认
|
|
1702
|
-
3.
|
|
1703
|
-
4.
|
|
1704
|
-
5.
|
|
1705
|
-
6.
|
|
1706
|
-
7.
|
|
1654
|
+
3. **零配置支持**: 无需配置文件即可使用,系统自动使用默认配置 `{ default: 'package.json' }`
|
|
1655
|
+
4. **路径模式**: 支持 `mbump ./path` 模式,自动查找指定目录下的 `package.json`,适合快速更新独立子包
|
|
1656
|
+
5. **Node 版本**: 需要 Node.js >= 18.0.0
|
|
1657
|
+
6. **包管理器**: 默认使用 pnpm 发布,可在配置中修改为 npm 或 yarn
|
|
1658
|
+
7. **路径解析**: 相对路径相对于配置文件所在目录解析,而非当前工作目录
|
|
1659
|
+
8. **默认包保留**: `default` 键始终指向根目录的 `package.json`,即使配置了其他包路径
|
|
1660
|
+
9. **全局安装**: 支持 `npm install -g @mznjs/mbump`,所有依赖已移至 `dependencies` 确保全局安装后可用
|
|
1661
|
+
10. **配置文件格式**: 支持 `.ts`/`.mjs`/`.js`/`.cjs`/`.json`/`.yaml`/`.yml`/`.toml` 多种格式
|
|
1662
|
+
11. **配置文件优先级**: 按以下顺序查找:`.ts` → `.mjs` → `.js` → `.cjs` → `.json` → `.yaml` → `.yml` → `.toml` → `package.json`
|
|
1707
1663
|
|
|
1708
1664
|
## 📚 更多资源
|
|
1709
1665
|
|
|
1710
1666
|
- [配置示例](./config-examples/) - 各种格式的配置文件示例
|
|
1711
1667
|
- [CHANGELOG](./CHANGELOG.md) - 版本更新历史
|
|
1712
|
-
- [GitHub Issues](https://github.com/mznjs/mbump/issues) - 问题反馈
|
|
1713
1668
|
|
|
1714
1669
|
## 🤝 贡献指南
|
|
1715
1670
|
|
|
@@ -1746,5 +1701,3 @@ MIT License
|
|
|
1746
1701
|
---
|
|
1747
1702
|
|
|
1748
1703
|
**mbump** - 让版本管理更简单!🚀
|
|
1749
|
-
|
|
1750
|
-
```
|