@mznjs/mbump 2.1.0 → 2.2.2
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 +106 -0
- package/README.md +275 -1462
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +255 -87
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +72 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -43
- package/dist/index.js.map +1 -1
- package/dist/{VersionManager-CwsuNWyP.js → path-BvKf4Pq-.js} +427 -37
- package/dist/path-BvKf4Pq-.js.map +1 -0
- package/package.json +14 -13
- package/dist/VersionManager-CwsuNWyP.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,63 +1,42 @@
|
|
|
1
1
|
# mbump
|
|
2
2
|
|
|
3
|
-
企业级版本管理工具,支持单包和
|
|
3
|
+
企业级版本管理工具,支持单包和 Monorepo 场景,让版本更新变得简单高效。
|
|
4
4
|
|
|
5
5
|
## ✨ 功能特性
|
|
6
6
|
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
- ✅ **多格式配置文件支持** (TS/JS/JSON/YAML/TOML)
|
|
18
|
-
- ✅ 智能配置加载(支持异步/同步)
|
|
19
|
-
- ✅ 未提交更改检测与处理
|
|
20
|
-
- ✅ 详细日志输出模式
|
|
21
|
-
- ✅ **零配置启动** - 无需配置文件即可使用
|
|
7
|
+
- **版本管理**:支持 major/minor/patch 递增,以及 pre-release 版本
|
|
8
|
+
- **Monorepo 支持**:管理多个包的版本,支持批量更新
|
|
9
|
+
- **交互式选择**:可视化选择版本类型,无需记忆命令参数
|
|
10
|
+
- **Git 集成**:自动提交、打 Tag、推送到远程仓库
|
|
11
|
+
- **CHANGELOG 生成**:根据 Git 提交自动生成更新日志
|
|
12
|
+
- **路径模式**:直接指定项目目录,无需配置文件
|
|
13
|
+
- **Rust 支持**:更新 Cargo.toml 中的版本号
|
|
14
|
+
- **安全检查**:检测未提交更改,防止版本状态不一致
|
|
15
|
+
- **Dry-run 模式**:预览将要执行的操作,避免误操作
|
|
16
|
+
- **多格式配置**:支持 TS/JS/JSON/YAML/TOML 等多种配置格式
|
|
22
17
|
|
|
23
18
|
## 📦 安装
|
|
24
19
|
|
|
25
20
|
### 全局安装(推荐)
|
|
26
21
|
|
|
27
|
-
适合在多个项目中使用,一次安装,全局可用:
|
|
28
|
-
|
|
29
22
|
```bash
|
|
30
23
|
npm install -g @mznjs/mbump
|
|
31
24
|
# 或
|
|
32
25
|
pnpm add -g @mznjs/mbump
|
|
33
26
|
```
|
|
34
27
|
|
|
35
|
-
**全局安装特性**:
|
|
36
|
-
- ✅ 所有依赖(包括 `tsx`)已移至 `dependencies`,确保全局安装后正常工作
|
|
37
|
-
- ✅ 支持 `.ts` 配置文件的自动编译
|
|
38
|
-
- ✅ 可在任意项目目录下使用
|
|
39
|
-
|
|
40
28
|
### 本地安装
|
|
41
29
|
|
|
42
|
-
适合在单个项目中使用,作为开发依赖:
|
|
43
|
-
|
|
44
30
|
```bash
|
|
45
31
|
npm install @mznjs/mbump -D
|
|
46
32
|
# 或
|
|
47
33
|
pnpm add @mznjs/mbump -D
|
|
48
34
|
```
|
|
49
35
|
|
|
50
|
-
**本地安装特性**:
|
|
51
|
-
- ✅ 项目级依赖,不影响全局环境
|
|
52
|
-
- ✅ 可在 `package.json` 的 `scripts` 中使用
|
|
53
|
-
- ✅ 推荐在 CI/CD 流程中使用
|
|
54
|
-
|
|
55
36
|
## 🚀 快速开始
|
|
56
37
|
|
|
57
38
|
### 单包项目(零配置)
|
|
58
39
|
|
|
59
|
-
无需任何配置文件,mbump 会自动使用默认配置 `{ default: 'package.json' }`:
|
|
60
|
-
|
|
61
40
|
```bash
|
|
62
41
|
# 升级补丁版本
|
|
63
42
|
mbump patch
|
|
@@ -72,349 +51,203 @@ mbump major
|
|
|
72
51
|
mbump
|
|
73
52
|
```
|
|
74
53
|
|
|
75
|
-
|
|
76
|
-
- ✅ 自动识别当前目录的 `package.json`
|
|
77
|
-
- ✅ 使用 `default` 作为包名
|
|
78
|
-
- ✅ 创建 Git Tag:`v{version}`(如 `v1.0.1`)
|
|
79
|
-
- ✅ 生成 CHANGELOG.md
|
|
80
|
-
|
|
81
|
-
### 路径模式(直接指定项目目录)
|
|
82
|
-
|
|
83
|
-
无需配置文件,直接指定项目目录路径,mbump 会自动查找该目录下的 `package.json`:
|
|
54
|
+
### 路径模式
|
|
84
55
|
|
|
85
56
|
```bash
|
|
86
|
-
#
|
|
57
|
+
# 更新指定目录下的项目(默认 patch)
|
|
87
58
|
mbump ./packages/my-pkg
|
|
88
59
|
|
|
89
60
|
# 指定版本类型
|
|
90
|
-
mbump ./packages/my-pkg patch
|
|
91
61
|
mbump ./packages/my-pkg minor
|
|
92
|
-
mbump ./packages/my-pkg major
|
|
93
62
|
|
|
94
63
|
# 使用上级目录
|
|
95
64
|
mbump ../other-project
|
|
96
|
-
|
|
97
|
-
# 使用绝对路径
|
|
98
|
-
mbump /path/to/project
|
|
99
|
-
mbump C:\projects\my-app
|
|
100
65
|
```
|
|
101
66
|
|
|
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
|
-
|
|
125
67
|
### Monorepo 项目
|
|
126
68
|
|
|
127
|
-
|
|
69
|
+
创建 `.mbump.config.ts` 配置文件:
|
|
70
|
+
|
|
71
|
+
```typescript
|
|
72
|
+
import type { Config } from '@mznjs/mbump'
|
|
128
73
|
|
|
129
|
-
|
|
130
|
-
{
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
}
|
|
74
|
+
export default {
|
|
75
|
+
packagePaths: {
|
|
76
|
+
components: 'packages/components/package.json',
|
|
77
|
+
cli: 'packages/cli/package.json',
|
|
78
|
+
core: 'packages/core/package.json',
|
|
79
|
+
},
|
|
80
|
+
} satisfies Config
|
|
137
81
|
```
|
|
138
82
|
|
|
139
|
-
|
|
140
|
-
- ✅ **默认包始终保留**:即使配置了 `packagePaths`,`default` 键(指向根目录 `package.json`)仍然会被保留
|
|
141
|
-
- ✅ **路径解析基准**:相对路径相对于配置文件所在目录解析,而非当前工作目录
|
|
142
|
-
- ✅ **统一路径处理**:配置中的路径在加载时会自动解析为绝对路径
|
|
83
|
+
使用命令:
|
|
143
84
|
|
|
144
85
|
```bash
|
|
145
|
-
# 更新所有包(交互式选择每个包的版本)
|
|
146
|
-
mbump all
|
|
147
|
-
|
|
148
86
|
# 更新指定包
|
|
149
|
-
mbump components
|
|
150
|
-
|
|
151
|
-
# 更新根目录包
|
|
152
|
-
mbump default patch
|
|
87
|
+
mbump components patch
|
|
153
88
|
|
|
154
|
-
#
|
|
155
|
-
mbump
|
|
89
|
+
# 更新所有包
|
|
90
|
+
mbump all
|
|
156
91
|
|
|
157
|
-
#
|
|
158
|
-
mbump
|
|
92
|
+
# 试运行模式
|
|
93
|
+
mbump all minor --dry-run
|
|
159
94
|
```
|
|
160
95
|
|
|
161
|
-
##
|
|
96
|
+
## 📖 使用方法
|
|
162
97
|
|
|
163
|
-
|
|
164
|
-
用法: mbump [package|path] [type] [options]
|
|
98
|
+
### 1. 指定包名或路径
|
|
165
99
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
[type] 版本升级类型: major, minor, patch, pre-patch, pre-minor, pre-major
|
|
100
|
+
```bash
|
|
101
|
+
# 使用包名(需要配置文件)
|
|
102
|
+
mbump <package-name> <type>
|
|
170
103
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
--verbose, -v 详细输出模式,显示更多执行细节
|
|
174
|
-
--no-commit, -n 禁用自动git提交
|
|
175
|
-
--no-push, -p 禁用自动推送到远程仓库
|
|
176
|
-
--allow-uncommitted, -u 允许在有未提交更改的情况下继续操作
|
|
177
|
-
--npm, -N 启用npm/pnpm包发布功能(默认不发布)
|
|
178
|
-
--show-config, -c 显示当前加载的完整配置信息
|
|
179
|
-
--version, -V 显示当前版本号
|
|
180
|
-
--help, -h 显示此帮助信息
|
|
181
|
-
|
|
182
|
-
示例:
|
|
183
|
-
mbump components patch # 将components包升级一个补丁版本
|
|
184
|
-
mbump all minor # 将所有包升级一个小版本
|
|
185
|
-
mbump plugins major --dry-run # 试运行升级plugins包主版本
|
|
186
|
-
mbump core patch --no-push # 更新版本并提交到本地,但不推送到远程
|
|
187
|
-
mbump components patch --npm # 更新版本并发布到npm/pnpm
|
|
188
|
-
mbump # 交互式选择包和版本类型
|
|
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 # 使用用户主目录路径
|
|
104
|
+
# 使用路径(无需配置文件)
|
|
105
|
+
mbump <path> <type>
|
|
201
106
|
```
|
|
202
107
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
mbump 支持多种配置格式,并提供灵活的加载策略。
|
|
108
|
+
### 2. 版本类型
|
|
206
109
|
|
|
207
|
-
|
|
110
|
+
| 类型 | 说明 | 示例 |
|
|
111
|
+
|------|------|------|
|
|
112
|
+
| `major` | 主版本号递增 | 1.0.0 → 2.0.0 |
|
|
113
|
+
| `minor` | 次版本号递增 | 1.0.0 → 1.1.0 |
|
|
114
|
+
| `patch` | 修订号递增 | 1.0.0 → 1.0.1 |
|
|
115
|
+
| `pre-major` | 预发布主版本 | 1.0.0 → 2.0.0-beta.0 |
|
|
116
|
+
| `pre-minor` | 预发布次版本 | 1.0.0 → 1.1.0-beta.0 |
|
|
117
|
+
| `pre-patch` | 预发布修订版 | 1.0.0 → 1.0.1-beta.0 |
|
|
118
|
+
| `as-is` | 使用自定义版本 | 指定 customVersion |
|
|
208
119
|
|
|
209
|
-
|
|
210
|
-
|------|-----------|---------|---------|------|
|
|
211
|
-
| TypeScript | `.ts` | ✅ | ❌ | 需要 tsx,提供类型安全 |
|
|
212
|
-
| ES Module | `.mjs` | ✅ | ❌ | 使用 `export default` |
|
|
213
|
-
| JavaScript | `.js` | ✅ | ⚠️ | 优先 ES Module,兼容 CommonJS |
|
|
214
|
-
| CommonJS | `.cjs` | ✅ | ✅ | 使用 `module.exports` |
|
|
215
|
-
| JSON | `.json`, `.jsonc` | ✅ | ✅ | 标准 JSON 或带注释 JSON |
|
|
216
|
-
| YAML | `.yaml`, `.yml` | ✅ | ✅ | YAML 格式 |
|
|
217
|
-
| TOML | `.toml` | ✅ | ✅ | TOML 格式 |
|
|
218
|
-
| package.json | - | ✅ | ✅ | 在 `mbump` 字段中配置 |
|
|
120
|
+
### 3. 常用命令示例
|
|
219
121
|
|
|
220
|
-
|
|
122
|
+
```bash
|
|
123
|
+
# 更新补丁版本
|
|
124
|
+
mbump patch
|
|
221
125
|
|
|
222
|
-
|
|
126
|
+
# 更新指定包的小版本
|
|
127
|
+
mbump components minor
|
|
223
128
|
|
|
224
|
-
|
|
129
|
+
# 批量更新所有包
|
|
130
|
+
mbump all
|
|
225
131
|
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
3. JavaScript (`.js`)
|
|
229
|
-
4. CommonJS (`.cjs`)
|
|
230
|
-
5. JSON (`.json`, `.jsonc`)
|
|
231
|
-
6. YAML (`.yaml`, `.yml`)
|
|
232
|
-
7. TOML (`.toml`)
|
|
233
|
-
8. package.json
|
|
132
|
+
# 批量更新所有包到补丁版本
|
|
133
|
+
mbump all patch
|
|
234
134
|
|
|
235
|
-
|
|
135
|
+
# 预发布版本
|
|
136
|
+
mbump pre-minor
|
|
236
137
|
|
|
237
|
-
|
|
138
|
+
# 试运行模式(预览操作)
|
|
139
|
+
mbump components patch --dry-run
|
|
238
140
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
export default {
|
|
242
|
-
packagePaths: {
|
|
243
|
-
components: 'packages/components/package.json',
|
|
244
|
-
cli: 'packages/cli/package.json',
|
|
245
|
-
},
|
|
246
|
-
defaults: {
|
|
247
|
-
releaseType: 'patch',
|
|
248
|
-
},
|
|
249
|
-
}
|
|
250
|
-
```
|
|
141
|
+
# 更新版本并发布到 NPM
|
|
142
|
+
mbump components patch --npm
|
|
251
143
|
|
|
252
|
-
|
|
144
|
+
# 更新版本但不推送到远程
|
|
145
|
+
mbump components patch --no-push
|
|
253
146
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
import type { Config } from '@mznjs/mbump'
|
|
147
|
+
# 允许未提交更改的情况下继续
|
|
148
|
+
mbump components patch --allow-uncommitted
|
|
257
149
|
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
components: 'packages/components/package.json',
|
|
261
|
-
},
|
|
262
|
-
defaults: {
|
|
263
|
-
releaseType: 'minor',
|
|
264
|
-
},
|
|
265
|
-
} satisfies Config
|
|
150
|
+
# 详细输出模式
|
|
151
|
+
mbump components patch --verbose
|
|
266
152
|
```
|
|
267
153
|
|
|
268
|
-
|
|
154
|
+
### 4. 路径模式详解
|
|
269
155
|
|
|
270
|
-
|
|
271
|
-
// .mbump.config.cjs
|
|
272
|
-
module.exports = {
|
|
273
|
-
packagePaths: {
|
|
274
|
-
components: 'packages/components/package.json',
|
|
275
|
-
},
|
|
276
|
-
}
|
|
277
|
-
```
|
|
156
|
+
路径模式允许直接指定项目目录,无需配置文件:
|
|
278
157
|
|
|
279
|
-
|
|
158
|
+
```bash
|
|
159
|
+
# 相对路径
|
|
160
|
+
mbump ./packages/my-pkg
|
|
161
|
+
mbump ../other-project
|
|
280
162
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
"defaults": {
|
|
288
|
-
"releaseType": "patch"
|
|
289
|
-
},
|
|
290
|
-
"git": {
|
|
291
|
-
"commitMessage": "chore: bump version to {{newVersion}}",
|
|
292
|
-
"push": true,
|
|
293
|
-
"autoCommit": true,
|
|
294
|
-
"tag": true,
|
|
295
|
-
"tagPrefix": "v",
|
|
296
|
-
"changelog": true
|
|
297
|
-
},
|
|
298
|
-
"publish": {
|
|
299
|
-
"command": "pnpm publish --access public --no-git-checks",
|
|
300
|
-
"skipChecks": true
|
|
301
|
-
}
|
|
302
|
-
}
|
|
163
|
+
# 绝对路径
|
|
164
|
+
mbump /path/to/project
|
|
165
|
+
mbump C:\Projects\my-app
|
|
166
|
+
|
|
167
|
+
# 当前目录
|
|
168
|
+
mbump .
|
|
303
169
|
```
|
|
304
170
|
|
|
305
|
-
|
|
171
|
+
支持的路径格式:
|
|
172
|
+
|
|
173
|
+
| 格式 | 示例 |
|
|
174
|
+
|------|------|
|
|
175
|
+
| 相对路径 | `./packages/my-pkg` |
|
|
176
|
+
| 上级目录 | `../other-project` |
|
|
177
|
+
| 绝对路径 | `/usr/local/project` |
|
|
178
|
+
| Windows 路径 | `C:\Projects\app` |
|
|
179
|
+
| 用户主目录 | `~/projects/my-app` |
|
|
180
|
+
| UNC 路径 | `\\server\share\project` |
|
|
306
181
|
|
|
307
|
-
|
|
308
|
-
# .mbump.config.yaml
|
|
309
|
-
packagePaths:
|
|
310
|
-
components: packages/components/package.json
|
|
311
|
-
cli: packages/cli/package.json
|
|
182
|
+
### 5. Rust 项目模式
|
|
312
183
|
|
|
313
|
-
|
|
314
|
-
|
|
184
|
+
```bash
|
|
185
|
+
# 更新当前目录 Rust 项目
|
|
186
|
+
mbump --rust patch
|
|
315
187
|
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
push: true
|
|
319
|
-
autoCommit: true
|
|
320
|
-
tag: true
|
|
321
|
-
tagPrefix: v
|
|
322
|
-
changelog: true
|
|
188
|
+
# 更新指定目录的 Rust 项目
|
|
189
|
+
mbump ./backend -r minor
|
|
323
190
|
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
skipChecks: true
|
|
191
|
+
# 试运行模式
|
|
192
|
+
mbump -r major --dry-run
|
|
327
193
|
```
|
|
328
194
|
|
|
329
|
-
|
|
195
|
+
## ⚙️ 配置文件
|
|
330
196
|
|
|
331
|
-
|
|
332
|
-
# .mbump.config.toml
|
|
333
|
-
[packagePaths]
|
|
334
|
-
components = "packages/components/package.json"
|
|
335
|
-
cli = "packages/cli/package.json"
|
|
197
|
+
### 配置文件格式
|
|
336
198
|
|
|
337
|
-
|
|
338
|
-
|
|
199
|
+
支持多种格式,按以下顺序查找:
|
|
200
|
+
`.ts` → `.mjs` → `.js` → `.cjs` → `.json` → `.yaml` → `.yml` → `.toml` → `package.json`
|
|
339
201
|
|
|
340
|
-
|
|
341
|
-
commitMessage = "chore: bump version to {{newVersion}}"
|
|
342
|
-
push = true
|
|
343
|
-
autoCommit = true
|
|
344
|
-
tag = true
|
|
345
|
-
tagPrefix = "v"
|
|
346
|
-
changelog = true
|
|
202
|
+
### 配置选项
|
|
347
203
|
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
skipChecks = true
|
|
351
|
-
```
|
|
204
|
+
```typescript
|
|
205
|
+
import type { Config } from '@mznjs/mbump'
|
|
352
206
|
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
"mbump": {
|
|
360
|
-
"packagePaths": {
|
|
361
|
-
"components": "packages/components/package.json",
|
|
362
|
-
"cli": "packages/cli/package.json"
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
```
|
|
207
|
+
export default {
|
|
208
|
+
// 包路径配置
|
|
209
|
+
packagePaths: {
|
|
210
|
+
default: 'package.json',
|
|
211
|
+
components: 'packages/components/package.json',
|
|
212
|
+
},
|
|
367
213
|
|
|
368
|
-
|
|
214
|
+
// 默认选项
|
|
215
|
+
defaults: {
|
|
216
|
+
releaseType: 'patch',
|
|
217
|
+
dryRun: false,
|
|
218
|
+
verbose: false,
|
|
219
|
+
allowUncommitted: false,
|
|
220
|
+
npm: false,
|
|
221
|
+
},
|
|
369
222
|
|
|
370
|
-
|
|
223
|
+
// Git 选项
|
|
224
|
+
git: {
|
|
225
|
+
commitMessage: 'chore: bump version to {{newVersion}}',
|
|
226
|
+
push: true,
|
|
227
|
+
autoCommit: true,
|
|
228
|
+
tag: true,
|
|
229
|
+
tagPrefix: 'v',
|
|
230
|
+
changelog: true,
|
|
231
|
+
},
|
|
371
232
|
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
components: 'packages/components/package.json',
|
|
233
|
+
// 发布选项
|
|
234
|
+
publish: {
|
|
235
|
+
command: 'pnpm publish --access public --no-git-checks',
|
|
236
|
+
skipChecks: true,
|
|
377
237
|
},
|
|
378
|
-
}
|
|
238
|
+
} satisfies Config
|
|
379
239
|
```
|
|
380
240
|
|
|
381
|
-
###
|
|
241
|
+
### 配置项说明
|
|
382
242
|
|
|
383
|
-
####
|
|
243
|
+
#### packagePaths
|
|
384
244
|
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
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
|
-
```
|
|
416
|
-
|
|
417
|
-
#### defaults 选项
|
|
245
|
+
包路径映射,键为包名,值为 `package.json` 的相对路径(相对于配置文件所在目录)。
|
|
246
|
+
|
|
247
|
+
- `default` 键始终指向根目录的 `package.json`
|
|
248
|
+
- 即使不配置,系统也会自动使用 `{ default: 'package.json' }`
|
|
249
|
+
|
|
250
|
+
#### defaults
|
|
418
251
|
|
|
419
252
|
| 选项 | 类型 | 默认值 | 说明 |
|
|
420
253
|
|------|------|--------|------|
|
|
@@ -424,301 +257,164 @@ export default () => ({
|
|
|
424
257
|
| `allowUncommitted` | `boolean` | `false` | 允许未提交更改 |
|
|
425
258
|
| `npm` | `boolean` | `false` | 默认启用发布 |
|
|
426
259
|
|
|
427
|
-
#### git
|
|
260
|
+
#### git
|
|
428
261
|
|
|
429
262
|
| 选项 | 类型 | 默认值 | 说明 |
|
|
430
263
|
|------|------|--------|------|
|
|
431
|
-
| `commitMessage` | `string` | `'chore: bump version
|
|
432
|
-
| `push` | `boolean` | `true` |
|
|
433
|
-
| `autoCommit` | `boolean` | `true` |
|
|
434
|
-
| `tag` | `boolean` | `true` | 是否创建
|
|
435
|
-
| `tagPrefix` | `string` | `'v'` |
|
|
436
|
-
| `changelog` | `boolean` | `true` | 是否生成 CHANGELOG
|
|
437
|
-
|
|
438
|
-
**Git Tag 策略**:
|
|
439
|
-
|
|
440
|
-
mbump 根据包的类型采用不同的 Tag 命名策略:
|
|
441
|
-
|
|
442
|
-
#### 主项目包 (default / root package)
|
|
443
|
-
- **Tag 格式**: `{tagPrefix}{version}`
|
|
444
|
-
- **使用前缀**: 是(默认 `v`)
|
|
445
|
-
- **识别条件**: 包名为 `default` 或包路径为 `package.json`(根目录)
|
|
446
|
-
- **示例**:
|
|
447
|
-
```bash
|
|
448
|
-
mbump default patch
|
|
449
|
-
# 假设 package.json 中 "name": "@my-org/monorepo"
|
|
450
|
-
# → 创建 Tag: v1.0.1
|
|
451
|
-
|
|
452
|
-
# 自定义前缀
|
|
453
|
-
mbump default minor
|
|
454
|
-
# 如果配置 git.tagPrefix = "release-"
|
|
455
|
-
# → 创建 Tag: release-1.1.0
|
|
456
|
-
```
|
|
457
|
-
|
|
458
|
-
#### 子包 (所有非主项目包)
|
|
459
|
-
- **Tag 格式**: `{package-name}@{version}`
|
|
460
|
-
- **不使用前缀**: 直接使用 package.json 中的 `name` 字段
|
|
461
|
-
- **适用场景**:
|
|
462
|
-
- 单独更新子包:`mbump components patch`
|
|
463
|
-
- 批量更新所有包:`mbump all`
|
|
464
|
-
- **示例**:
|
|
465
|
-
```bash
|
|
466
|
-
mbump components patch
|
|
467
|
-
# 假设 components/package.json 中 "name": "@my-org/components"
|
|
468
|
-
# → 创建 Tag: @my-org/components@1.0.1
|
|
469
|
-
|
|
470
|
-
mbump cli minor
|
|
471
|
-
# 假设 cli/package.json 中 "name": "@my-org/cli"
|
|
472
|
-
# → 创建 Tag: @my-org/cli@2.3.0
|
|
473
|
-
```
|
|
474
|
-
|
|
475
|
-
#### 批量更新 (mbump all)
|
|
476
|
-
当使用 `mbump all` 时,会为每个包创建相应的 Tag:
|
|
477
|
-
```bash
|
|
478
|
-
mbump all
|
|
479
|
-
# → 主项目包: v1.0.1 (使用 tagPrefix)
|
|
480
|
-
# → 子包们:
|
|
481
|
-
# - @my-org/components@1.0.1
|
|
482
|
-
# - @my-org/cli@2.3.0
|
|
483
|
-
# - @my-org/core@0.5.2
|
|
484
|
-
```
|
|
485
|
-
|
|
486
|
-
**优势**:
|
|
487
|
-
- ✅ 主项目包保持简洁的 `v1.0.1` 格式,符合传统习惯
|
|
488
|
-
- ✅ 子包使用清晰的 `{包名}@{版本号}` 格式,便于区分
|
|
489
|
-
- ✅ 清晰区分主项目和子包的版本历史
|
|
490
|
-
- ✅ 便于单独回滚某个包到特定版本
|
|
491
|
-
- ✅ 符合 Monorepo 最佳实践(类似 pnpm、lerna)
|
|
492
|
-
- ✅ 支持独立的 CI/CD 流程
|
|
493
|
-
|
|
494
|
-
#### CHANGELOG 生成策略
|
|
495
|
-
|
|
496
|
-
mbump 在不同场景下采用不同的 CHANGELOG 生成策略:
|
|
497
|
-
|
|
498
|
-
**单包更新** (`mbump components patch`):
|
|
499
|
-
- ✅ 为该包生成 CHANGELOG.md
|
|
500
|
-
- ✅ 记录从上一个 Tag 到当前的所有 commits
|
|
501
|
-
- ✅ **标题格式**: `[package-name@version]`,例如 `[@mznjs/components@1.0.1]`
|
|
502
|
-
|
|
503
|
-
**批量更新** (`mbump all`):
|
|
504
|
-
- ✅ **主项目包**:生成 CHANGELOG.md(如果 `git.changelog = true`)
|
|
505
|
-
- ❌ **子包**:跳过 CHANGELOG 生成,避免重复和混乱
|
|
506
|
-
|
|
507
|
-
**原因**:
|
|
508
|
-
- Monorepo 项目中,所有包的 commits 通常都在同一个仓库中
|
|
509
|
-
- 为每个子包单独生成 CHANGELOG 会导致内容重复
|
|
510
|
-
- 只在主项目包生成一份完整的 CHANGELOG 更清晰、更易维护
|
|
511
|
-
|
|
512
|
-
**CHANGELOG 标题格式**:
|
|
513
|
-
- **主项目包**: `[v1.0.1]` (使用 tagPrefix)
|
|
514
|
-
- **子包**: `[@mznjs/components@1.0.1]` (使用 package.json 的 name 字段)
|
|
515
|
-
|
|
516
|
-
**示例**:
|
|
517
|
-
```bash
|
|
518
|
-
# 单包更新 - 会生成 CHANGELOG
|
|
519
|
-
mbump components patch
|
|
520
|
-
# → CHANGELOG.md 中添加: ## [@mznjs/components@1.0.1] - 2024-01-15 ✅
|
|
521
|
-
|
|
522
|
-
# 主项目包单独更新
|
|
523
|
-
mbump default patch
|
|
524
|
-
# → CHANGELOG.md 中添加: ## [v1.0.1] - 2024-01-15 ✅
|
|
525
|
-
|
|
526
|
-
# 批量更新 - 只有主项目包生成 CHANGELOG
|
|
527
|
-
mbump all
|
|
528
|
-
# → 主项目包: CHANGELOG.md 中添加: ## [v1.0.1] - 2024-01-15 ✅
|
|
529
|
-
# → 子包 components: 子包 components 跳过 CHANGELOG 生成
|
|
530
|
-
# → 子包 cli: 子包 cli 跳过 CHANGELOG 生成
|
|
531
|
-
```
|
|
532
|
-
|
|
533
|
-
如需为子包单独生成 CHANGELOG,可以单独更新该包:
|
|
534
|
-
```bash
|
|
535
|
-
mbump components patch --changelog
|
|
536
|
-
```
|
|
264
|
+
| `commitMessage` | `string` | `'chore: bump version...'` | 提交消息模板 |
|
|
265
|
+
| `push` | `boolean` | `true` | 是否自动推送 |
|
|
266
|
+
| `autoCommit` | `boolean` | `true` | 是否自动提交 |
|
|
267
|
+
| `tag` | `boolean` | `true` | 是否创建 Tag |
|
|
268
|
+
| `tagPrefix` | `string` | `'v'` | Tag 前缀(仅主项目) |
|
|
269
|
+
| `changelog` | `boolean` | `true` | 是否生成 CHANGELOG |
|
|
537
270
|
|
|
538
|
-
#### publish
|
|
271
|
+
#### publish
|
|
539
272
|
|
|
540
273
|
| 选项 | 类型 | 默认值 | 说明 |
|
|
541
274
|
|------|------|--------|------|
|
|
542
|
-
| `command` | `string` | `'pnpm publish
|
|
275
|
+
| `command` | `string` | `'pnpm publish...'` | 发布命令 |
|
|
543
276
|
| `skipChecks` | `boolean` | `true` | 跳过安全检查 |
|
|
544
277
|
|
|
545
|
-
|
|
278
|
+
## 📝 命令行选项
|
|
546
279
|
|
|
547
|
-
#### 单包项目
|
|
548
|
-
|
|
549
|
-
无需配置文件,直接使用默认配置:
|
|
550
|
-
|
|
551
|
-
```bash
|
|
552
|
-
# 直接使用,自动识别当前目录的 package.json
|
|
553
|
-
mbump patch
|
|
554
280
|
```
|
|
281
|
+
用法: mbump [package|path] [type] [options]
|
|
555
282
|
|
|
556
|
-
|
|
283
|
+
参数:
|
|
284
|
+
[package] 要更新的包名称或 "all" 更新所有包
|
|
285
|
+
[path] 项目目录路径(支持 ./path, ../path, /path, C:\path)
|
|
286
|
+
[type] 版本升级类型: major, minor, patch, pre-patch, pre-minor, pre-major
|
|
557
287
|
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
288
|
+
选项:
|
|
289
|
+
--dry-run, -d 试运行模式,只显示将要执行的操作
|
|
290
|
+
--verbose, -v 详细输出模式,显示更多执行细节
|
|
291
|
+
--no-commit, -n 禁用自动 Git 提交
|
|
292
|
+
--no-push, -p 禁用自动推送到远程仓库
|
|
293
|
+
--allow-uncommitted, -u 允许在有未提交更改的情况下继续操作
|
|
294
|
+
--npm, -N 启用 NPM/PNPM 包发布功能
|
|
295
|
+
--show-config, -c 显示当前加载的完整配置信息
|
|
296
|
+
--rust, -r 启用 Rust 项目模式
|
|
297
|
+
--version, -V 显示当前版本号
|
|
298
|
+
--help, -h 显示帮助信息
|
|
564
299
|
```
|
|
565
300
|
|
|
566
|
-
|
|
301
|
+
## 🔌 API 使用
|
|
567
302
|
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
// 核心包
|
|
573
|
-
core: 'packages/core/package.json',
|
|
574
|
-
// UI 组件库
|
|
575
|
-
components: 'packages/components/package.json',
|
|
576
|
-
// CLI 工具
|
|
577
|
-
cli: 'packages/cli/package.json',
|
|
578
|
-
// 插件系统
|
|
579
|
-
plugins: 'packages/plugins/package.json',
|
|
580
|
-
},
|
|
581
|
-
defaults: {
|
|
582
|
-
releaseType: 'patch',
|
|
583
|
-
verbose: false,
|
|
584
|
-
},
|
|
585
|
-
git: {
|
|
586
|
-
commitMessage: 'chore(release): bump {{name}} to {{newVersion}}',
|
|
587
|
-
tagPrefix: '',
|
|
588
|
-
},
|
|
589
|
-
publish: {
|
|
590
|
-
command: 'pnpm publish --access public --no-git-checks',
|
|
591
|
-
skipChecks: true,
|
|
592
|
-
},
|
|
593
|
-
}
|
|
303
|
+
### 核心类
|
|
304
|
+
|
|
305
|
+
```typescript
|
|
306
|
+
import { VersionManager, RustManager, GitManager, ChangelogManager } from '@mznjs/mbump'
|
|
594
307
|
```
|
|
595
308
|
|
|
596
|
-
|
|
309
|
+
### VersionManager
|
|
597
310
|
|
|
598
311
|
```typescript
|
|
599
|
-
import { VersionManager,
|
|
312
|
+
import { VersionManager, loadConfigAsync } from '@mznjs/mbump'
|
|
600
313
|
|
|
601
|
-
// 异步加载配置(推荐)
|
|
602
314
|
const config = await loadConfigAsync(process.cwd())
|
|
603
315
|
const manager = new VersionManager({ config, rootDir: process.cwd() })
|
|
604
316
|
|
|
605
|
-
//
|
|
606
|
-
const config = loadConfig(process.cwd())
|
|
607
|
-
const manager = new VersionManager({ config, rootDir: process.cwd() })
|
|
608
|
-
|
|
609
|
-
// 更新单个包版本
|
|
317
|
+
// 更新版本
|
|
610
318
|
const result = await manager.updateVersion('my-package', 'minor', {
|
|
611
319
|
dryRun: false,
|
|
612
320
|
verbose: true,
|
|
613
321
|
autoCommit: true,
|
|
614
322
|
push: true,
|
|
615
|
-
npm: false,
|
|
616
323
|
})
|
|
617
324
|
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
// {
|
|
621
|
-
// name: 'my-package',
|
|
622
|
-
// oldVersion: '1.0.0',
|
|
623
|
-
// newVersion: '1.1.0'
|
|
624
|
-
// }
|
|
625
|
-
// ]
|
|
325
|
+
// 预览更新
|
|
326
|
+
const preview = await manager.previewUpdate('my-package', 'patch')
|
|
626
327
|
|
|
627
|
-
//
|
|
328
|
+
// 获取包版本
|
|
628
329
|
const version = manager.getPackageVersion('my-package')
|
|
629
|
-
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
### RustManager
|
|
333
|
+
|
|
334
|
+
```typescript
|
|
335
|
+
import { RustManager } from '@mznjs/mbump'
|
|
630
336
|
|
|
631
|
-
|
|
632
|
-
|
|
337
|
+
const rustManager = new RustManager('/path/to/rust-project')
|
|
338
|
+
|
|
339
|
+
// 更新版本
|
|
340
|
+
const result = rustManager.updateVersion('patch', {
|
|
341
|
+
dryRun: false,
|
|
342
|
+
})
|
|
633
343
|
```
|
|
634
344
|
|
|
635
|
-
|
|
345
|
+
### GitManager
|
|
636
346
|
|
|
637
|
-
|
|
347
|
+
```typescript
|
|
348
|
+
import { GitManager } from '@mznjs/mbump'
|
|
638
349
|
|
|
639
|
-
|
|
350
|
+
const gitManager = new GitManager('/path/to/project')
|
|
640
351
|
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
3. **统一报告**:所有包处理完成后,统一报告失败的包及其错误信息
|
|
644
|
-
4. **独立发布**:NPM 发布阶段也采用相同的容错机制,一个包发布失败不影响其他包
|
|
352
|
+
// 检查未提交更改
|
|
353
|
+
const hasChanges = gitManager.hasUncommittedChanges()
|
|
645
354
|
|
|
646
|
-
|
|
355
|
+
// 创建 Tag
|
|
356
|
+
await gitManager.createTag('1.0.0', 'v')
|
|
647
357
|
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
mbump all patch
|
|
358
|
+
// 提交并推送
|
|
359
|
+
await gitManager.commitAndPush('chore: bump version', true, true, '1.0.0', 'v')
|
|
651
360
|
```
|
|
652
361
|
|
|
653
|
-
|
|
654
|
-
```bash
|
|
655
|
-
✓ 包 components 更新完成
|
|
656
|
-
✓ 包 cli 更新完成
|
|
657
|
-
✓ 包 core 更新完成
|
|
658
|
-
✓ 已提交 3 个包的更改到 Git
|
|
659
|
-
✓ 已推送到远程仓库
|
|
660
|
-
✅ 版本更新完成
|
|
661
|
-
```
|
|
362
|
+
### 工具函数
|
|
662
363
|
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
✓ 包 components 更新完成
|
|
666
|
-
⚠️ 包 cli 更新失败: Git conflict detected
|
|
667
|
-
✓ 包 core 更新完成
|
|
668
|
-
✓ 包 utils 更新完成
|
|
364
|
+
```typescript
|
|
365
|
+
import { pathUtils, semverUtils, securityUtils } from '@mznjs/mbump'
|
|
669
366
|
|
|
670
|
-
|
|
671
|
-
|
|
367
|
+
// 路径工具
|
|
368
|
+
pathUtils.isPathLike('./packages/my-pkg') // true
|
|
672
369
|
|
|
673
|
-
|
|
370
|
+
// Semver 工具
|
|
371
|
+
semverUtils.incrementVersion('1.0.0', 'patch') // '1.0.1'
|
|
674
372
|
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
✅ 版本更新完成
|
|
373
|
+
// 安全工具
|
|
374
|
+
securityUtils.validatePath('/project/src', '/project') // true
|
|
678
375
|
```
|
|
679
376
|
|
|
680
|
-
|
|
377
|
+
## 🏷️ Git Tag 策略
|
|
378
|
+
|
|
379
|
+
### 主项目包
|
|
681
380
|
|
|
682
|
-
|
|
381
|
+
- **格式**: `{tagPrefix}{version}`
|
|
382
|
+
- **示例**: `v1.0.1`, `release-2.0.0`
|
|
383
|
+
- **识别条件**: 包名为 `default` 或包路径为 `package.json`
|
|
683
384
|
|
|
684
|
-
|
|
685
|
-
2. **单独重试**:修复后单独更新失败的包
|
|
686
|
-
```bash
|
|
687
|
-
mbump cli patch
|
|
688
|
-
```
|
|
689
|
-
3. **跳过 NPM 发布**:如果只是想更新版本和提交 Git
|
|
690
|
-
```bash
|
|
691
|
-
mbump all patch --no-npm
|
|
692
|
-
```
|
|
385
|
+
### 子包
|
|
693
386
|
|
|
694
|
-
|
|
387
|
+
- **格式**: `{package-name}@{version}`
|
|
388
|
+
- **示例**: `@my-org/components@1.0.1`, `cli@2.3.0`
|
|
389
|
+
- **识别条件**: 所有非主项目包
|
|
695
390
|
|
|
696
|
-
|
|
697
|
-
- **日志级别**:
|
|
698
|
-
- 单个包失败:黄色警告 (`⚠️`)
|
|
699
|
-
- 最终汇总:红色错误 (`❌`)
|
|
700
|
-
- 提示信息:蓝色信息 (`💡`)
|
|
701
|
-
- **Git 原子性**:所有成功的包会被一起提交到一个 Git commit 中
|
|
702
|
-
- **NPM 独立性**:每个包的 NPM 发布是独立的,互不影响
|
|
391
|
+
### 批量更新
|
|
703
392
|
|
|
704
|
-
|
|
393
|
+
使用 `mbump all` 时,会为每个包创建独立的 Tag:
|
|
705
394
|
|
|
706
|
-
|
|
395
|
+
```
|
|
396
|
+
v1.0.1 # 主项目包
|
|
397
|
+
@my-org/components@1.0.1 # 子包
|
|
398
|
+
@my-org/cli@2.3.0 # 子包
|
|
399
|
+
```
|
|
707
400
|
|
|
708
|
-
|
|
401
|
+
## 📋 Dry-run 模式
|
|
402
|
+
|
|
403
|
+
Dry-run 模式允许预览将要执行的操作,不实际修改任何文件:
|
|
709
404
|
|
|
710
405
|
```bash
|
|
711
406
|
mbump components patch --dry-run
|
|
712
407
|
```
|
|
713
408
|
|
|
714
|
-
|
|
409
|
+
输出示例:
|
|
410
|
+
|
|
715
411
|
```
|
|
716
412
|
🔍 Dry-run 模式 - 以下操作将被执行:
|
|
717
413
|
|
|
718
414
|
📦 components
|
|
719
415
|
当前版本: 1.0.0
|
|
720
416
|
新版本: 1.0.1
|
|
721
|
-
Tag: @
|
|
417
|
+
Tag: @my-org/components@1.0.1
|
|
722
418
|
CHANGELOG: 是
|
|
723
419
|
Git Commit: 是
|
|
724
420
|
Git Push: 是
|
|
@@ -727,960 +423,77 @@ mbump components patch --dry-run
|
|
|
727
423
|
✅ 以上为预览,未执行任何实际操作
|
|
728
424
|
```
|
|
729
425
|
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
```bash
|
|
733
|
-
mbump all minor --dry-run
|
|
734
|
-
```
|
|
735
|
-
|
|
736
|
-
**输出示例**:
|
|
737
|
-
```
|
|
738
|
-
🔍 Dry-run 模式 - 以下操作将被执行:
|
|
739
|
-
|
|
740
|
-
📦 default
|
|
741
|
-
当前版本: 0.0.1
|
|
742
|
-
新版本: 0.1.0
|
|
743
|
-
Tag: v0.1.0
|
|
744
|
-
CHANGELOG: 是
|
|
745
|
-
|
|
746
|
-
📦 components
|
|
747
|
-
当前版本: 1.0.0
|
|
748
|
-
新版本: 1.1.0
|
|
749
|
-
Tag: @mznjs/components@1.1.0
|
|
750
|
-
CHANGELOG: 跳过(子包或配置禁用)
|
|
751
|
-
|
|
752
|
-
📦 cli
|
|
753
|
-
当前版本: 2.0.0
|
|
754
|
-
新版本: 2.1.0
|
|
755
|
-
Tag: @mznjs/cli@2.1.0
|
|
756
|
-
CHANGELOG: 跳过(子包或配置禁用)
|
|
757
|
-
|
|
758
|
-
✅ 以上为预览,未执行任何实际操作
|
|
759
|
-
```
|
|
760
|
-
|
|
761
|
-
### 预览信息说明
|
|
762
|
-
|
|
763
|
-
Dry-run 模式会显示以下关键信息:
|
|
764
|
-
|
|
765
|
-
1. **📦 包名**:要更新的包名称
|
|
766
|
-
2. **当前版本**:包的当前版本号
|
|
767
|
-
3. **新版本**:将要升级到的版本号
|
|
768
|
-
4. **Tag**:将要创建的 Git Tag 名称
|
|
769
|
-
- 主项目包:`v{version}` 格式
|
|
770
|
-
- 子包:`{package-name}@{version}` 格式
|
|
771
|
-
5. **CHANGELOG**:是否会生成 CHANGELOG
|
|
772
|
-
- 主项目包:根据 `git.changelog` 配置
|
|
773
|
-
- 子包:批量更新时跳过,单包更新时生成
|
|
774
|
-
6. **Git Commit**:是否会自动提交到 Git(仅单包更新显示)
|
|
775
|
-
7. **Git Push**:是否会自动推送到远程仓库(仅单包更新显示)
|
|
776
|
-
8. **NPM Publish**:是否会发布到 NPM(仅单包更新显示)
|
|
426
|
+
## ⚠️ 未提交更改检测
|
|
777
427
|
|
|
778
|
-
|
|
428
|
+
系统会自动检测未提交的 Git 更改,并提示用户确认:
|
|
779
429
|
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
3. **确认操作范围**:了解哪些包会被更新
|
|
783
|
-
4. **避免误操作**:在实际执行前发现潜在问题
|
|
784
|
-
5. **团队协作**:在 PR 中展示将要进行的更改
|
|
785
|
-
|
|
786
|
-
### 注意事项
|
|
787
|
-
|
|
788
|
-
- Dry-run 模式不会修改任何文件
|
|
789
|
-
- 不会创建 Git commits 或 tags
|
|
790
|
-
- 不会发布到 NPM
|
|
791
|
-
- 适合用于 CI/CD 流程中的预检步骤
|
|
792
|
-
- 可以与 `--verbose` 结合使用获取更多信息
|
|
793
|
-
|
|
794
|
-
## ⚠️ 错误提示优化
|
|
795
|
-
|
|
796
|
-
mbump 提供了友好的错误提示信息,帮助用户快速理解和解决问题。
|
|
797
|
-
|
|
798
|
-
### 常见错误及解决方案
|
|
799
|
-
|
|
800
|
-
#### 1. 版本已存在
|
|
801
|
-
|
|
802
|
-
**错误信息**:
|
|
803
|
-
```
|
|
804
|
-
⚠️ 版本 v1.0.1 已存在
|
|
805
|
-
💡 请使用其他版本号,或运行 git tag -d <tag> 删除已有标签
|
|
430
|
+
```bash
|
|
431
|
+
mbump components patch
|
|
806
432
|
```
|
|
807
433
|
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
**解决方案**:
|
|
811
|
-
- 使用不同的版本号
|
|
812
|
-
- 或删除已有的 tag:`git tag -d v1.0.1 && git push origin :refs/tags/v1.0.1`
|
|
813
|
-
|
|
814
|
-
#### 2. Git 冲突
|
|
434
|
+
输出示例:
|
|
815
435
|
|
|
816
|
-
**错误信息**:
|
|
817
436
|
```
|
|
818
|
-
|
|
819
|
-
|
|
437
|
+
[warn] 警告: 检测到未提交的Git更改
|
|
438
|
+
? 是否继续(dry-run模式不会实际提交更改)? Yes
|
|
820
439
|
```
|
|
821
440
|
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
**解决方案**:
|
|
825
|
-
- 手动解决冲突
|
|
826
|
-
- 提交解决后的更改
|
|
827
|
-
- 重新运行 mbump
|
|
441
|
+
使用 `--allow-uncommitted` 选项跳过确认:
|
|
828
442
|
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
**错误信息**:
|
|
832
|
-
```
|
|
833
|
-
🔐 NPM 认证失败
|
|
834
|
-
💡 请运行 npm login 或 pnpm login 登录后重试
|
|
443
|
+
```bash
|
|
444
|
+
mbump components patch --allow-uncommitted
|
|
835
445
|
```
|
|
836
446
|
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
**解决方案**:
|
|
840
|
-
- 运行 `npm login` 或 `pnpm login`
|
|
841
|
-
- 输入用户名、密码和邮箱
|
|
842
|
-
- 重新运行 mbump
|
|
447
|
+
## 🛠️ 调试与诊断
|
|
843
448
|
|
|
844
|
-
|
|
449
|
+
### 查看配置
|
|
845
450
|
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
📦 NPM 包已存在或无权限
|
|
849
|
-
💡 检查包名是否已被占用,或确认是否有发布权限
|
|
451
|
+
```bash
|
|
452
|
+
mbump --show-config
|
|
850
453
|
```
|
|
851
454
|
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
**解决方案**:
|
|
855
|
-
- 检查包名是否唯一
|
|
856
|
-
- 联系包的所有者获取权限
|
|
857
|
-
- 或使用 scoped package(如 @my-org/package-name)
|
|
455
|
+
### 详细日志
|
|
858
456
|
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
**错误信息**:
|
|
862
|
-
```
|
|
863
|
-
🌐 网络连接失败
|
|
864
|
-
💡 请检查网络连接,或配置 NPM 镜像源
|
|
457
|
+
```bash
|
|
458
|
+
mbump components patch --verbose
|
|
865
459
|
```
|
|
866
460
|
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
**解决方案**:
|
|
870
|
-
- 检查网络连接
|
|
871
|
-
- 配置国内镜像源:
|
|
872
|
-
```bash
|
|
873
|
-
npm config set registry https://registry.npmmirror.com
|
|
874
|
-
# 或
|
|
875
|
-
pnpm config set registry https://registry.npmmirror.com
|
|
876
|
-
```
|
|
877
|
-
|
|
878
|
-
#### 6. 文件路径安全
|
|
461
|
+
### 常见错误处理
|
|
879
462
|
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
463
|
+
| 错误 | 解决方案 |
|
|
464
|
+
|------|---------|
|
|
465
|
+
| 版本已存在 | 删除已有 Tag: `git tag -d v1.0.1` |
|
|
466
|
+
| Git 冲突 | 解决冲突后重新运行 |
|
|
467
|
+
| NPM 认证失败 | 运行 `pnpm login` 登录 |
|
|
468
|
+
| 包名不存在 | 检查配置文件中的 `packagePaths` |
|
|
469
|
+
| 路径不存在 | 确认路径正确,目录存在 |
|
|
885
470
|
|
|
886
|
-
|
|
471
|
+
## 🧪 测试
|
|
887
472
|
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
473
|
+
```bash
|
|
474
|
+
# 运行所有测试
|
|
475
|
+
pnpm test
|
|
891
476
|
|
|
892
|
-
|
|
477
|
+
# 运行特定测试
|
|
478
|
+
pnpm test tests/integration.test.ts
|
|
893
479
|
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
❌ 无效的包名
|
|
897
|
-
💡 请检查配置文件中的 packagePaths 是否正确设置
|
|
480
|
+
# 监听模式
|
|
481
|
+
pnpm test:watch
|
|
898
482
|
```
|
|
899
483
|
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
**解决方案**:
|
|
903
|
-
- 检查 `.mbump.config.js` 中的 `packagePaths` 配置
|
|
904
|
-
- 确保包名与配置中的 key 一致
|
|
905
|
-
|
|
906
|
-
#### 8. 包路径不存在
|
|
484
|
+
## 🤝 贡献指南
|
|
907
485
|
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
486
|
+
1. Fork 本仓库
|
|
487
|
+
2. 创建特性分支 (`git checkout -b feature/amazing-feature`)
|
|
488
|
+
3. 提交更改 (`git commit -m 'Add some amazing feature'`)
|
|
489
|
+
4. 推送到分支 (`git push origin feature/amazing-feature`)
|
|
490
|
+
5. 开启 Pull Request
|
|
912
491
|
|
|
913
|
-
|
|
914
|
-
```
|
|
492
|
+
### 开发要求
|
|
915
493
|
|
|
916
|
-
**原因**:配置文件中指定的 package.json 文件不存在
|
|
917
|
-
|
|
918
|
-
**解决方案**:
|
|
919
|
-
- 检查路径是否正确
|
|
920
|
-
- 确保文件已创建
|
|
921
|
-
- 相对路径是相对于配置文件所在目录解析的
|
|
922
|
-
|
|
923
|
-
### 调试模式
|
|
924
|
-
|
|
925
|
-
如果遇到未知错误,可以使用 `DEBUG` 环境变量查看详细信息:
|
|
926
|
-
|
|
927
|
-
```bash
|
|
928
|
-
# Linux/Mac
|
|
929
|
-
DEBUG=true mbump components patch
|
|
930
|
-
|
|
931
|
-
# Windows PowerShell
|
|
932
|
-
$env:DEBUG="true"; mbump components patch
|
|
933
|
-
|
|
934
|
-
# Windows CMD
|
|
935
|
-
set DEBUG=true && mbump components patch
|
|
936
|
-
```
|
|
937
|
-
|
|
938
|
-
这将显示完整的错误堆栈信息,便于排查问题。
|
|
939
|
-
|
|
940
|
-
### 批量更新错误报告
|
|
941
|
-
|
|
942
|
-
在批量更新模式下,如果部分包失败,会统一报告:
|
|
943
|
-
|
|
944
|
-
```
|
|
945
|
-
❌ 批量更新完成,但有 1 个包更新失败:
|
|
946
|
-
- cli: Git conflict detected
|
|
947
|
-
|
|
948
|
-
💡 提示: 可以单独重试失败的包,或检查错误信息后重新运行
|
|
949
|
-
```
|
|
950
|
-
|
|
951
|
-
每个失败的包都会显示友好的错误提示和解决方案。
|
|
952
|
-
|
|
953
|
-
## 📊 进度条显示
|
|
954
|
-
|
|
955
|
-
在批量更新模式下,mbump 会实时显示更新进度,让你清楚地了解当前处理状态。
|
|
956
|
-
|
|
957
|
-
### 进度条格式
|
|
958
|
-
|
|
959
|
-
```
|
|
960
|
-
[████████████░░░░░░░░░░░░░░░░░░] 40% | 2/5 | ⟳ components - 处理中
|
|
961
|
-
```
|
|
962
|
-
|
|
963
|
-
**组成部分**:
|
|
964
|
-
- **进度条**:`[████████████░░░░░░░░░░░░░░░░░░]` 可视化进度
|
|
965
|
-
- **百分比**:`40%` 完成百分比
|
|
966
|
-
- **计数**:`2/5` 当前进度/总数
|
|
967
|
-
- **状态图标**:
|
|
968
|
-
- `⟳` 处理中
|
|
969
|
-
- `✓` 成功
|
|
970
|
-
- `✗` 失败
|
|
971
|
-
- **包名**:当前处理的包名称
|
|
972
|
-
- **状态文本**:处理中/完成/失败
|
|
973
|
-
|
|
974
|
-
### 使用示例
|
|
975
|
-
|
|
976
|
-
#### 批量更新进度
|
|
977
|
-
|
|
978
|
-
```bash
|
|
979
|
-
mbump all patch
|
|
980
|
-
```
|
|
981
|
-
|
|
982
|
-
**输出示例**:
|
|
983
|
-
```
|
|
984
|
-
📦 开始批量更新 5 个包...
|
|
985
|
-
|
|
986
|
-
[██████████████████████████████] 100% | ✓ cli - 完成
|
|
987
|
-
[██████████████████████████████] 100% | ✓ components - 完成
|
|
988
|
-
[██████████████████████████████] 100% | ✓ core - 完成
|
|
989
|
-
[██████████████████████████████] 100% | ✓ theme - 完成
|
|
990
|
-
[██████████████████████████████] 100% | ✓ utils - 完成
|
|
991
|
-
|
|
992
|
-
✅ 版本更新完成
|
|
993
|
-
```
|
|
994
|
-
|
|
995
|
-
#### NPM 发布进度
|
|
996
|
-
|
|
997
|
-
```bash
|
|
998
|
-
mbump all patch --npm
|
|
999
|
-
```
|
|
1000
|
-
|
|
1001
|
-
**输出示例**:
|
|
1002
|
-
```
|
|
1003
|
-
📦 开始批量更新 5 个包...
|
|
1004
|
-
|
|
1005
|
-
[██████████████████████████████] 100% | ✓ cli - 完成
|
|
1006
|
-
[██████████████████████████████] 100% | ✓ components - 完成
|
|
1007
|
-
...
|
|
1008
|
-
|
|
1009
|
-
🚀 开始发布 5 个包到 NPM...
|
|
1010
|
-
|
|
1011
|
-
[██████████████████████████████] 100% | ✓ @mznjs/cli - 完成
|
|
1012
|
-
[██████████████████████████████] 100% | ✓ @mznjs/components - 完成
|
|
1013
|
-
...
|
|
1014
|
-
|
|
1015
|
-
✅ 版本更新完成
|
|
1016
|
-
```
|
|
1017
|
-
|
|
1018
|
-
#### 部分失败情况
|
|
1019
|
-
|
|
1020
|
-
```bash
|
|
1021
|
-
mbump all patch
|
|
1022
|
-
```
|
|
1023
|
-
|
|
1024
|
-
**输出示例**:
|
|
1025
|
-
```
|
|
1026
|
-
📦 开始批量更新 5 个包...
|
|
1027
|
-
|
|
1028
|
-
[██████████████████████████████] 100% | ✓ cli - 完成
|
|
1029
|
-
[██████████████████████████████] 100% | ✓ components - 完成
|
|
1030
|
-
[██████████████████████████████] 100% | ✗ core - 失败
|
|
1031
|
-
[██████████████████████████████] 100% | ✓ theme - 完成
|
|
1032
|
-
[██████████████████████████████] 100% | ✓ utils - 完成
|
|
1033
|
-
|
|
1034
|
-
❌ 批量更新完成,但有 1 个包更新失败:
|
|
1035
|
-
- core: Git conflict detected
|
|
1036
|
-
|
|
1037
|
-
💡 提示: 可以单独重试失败的包,或检查错误信息后重新运行
|
|
1038
|
-
```
|
|
1039
|
-
|
|
1040
|
-
### 特性说明
|
|
1041
|
-
|
|
1042
|
-
1. **实时更新**:进度条在处理每个包时实时更新
|
|
1043
|
-
2. **状态反馈**:清晰显示每个包的处理状态(处理中/成功/失败)
|
|
1044
|
-
3. **视觉友好**:使用 Unicode 字符绘制美观的进度条
|
|
1045
|
-
4. **自动换行**:每个包处理完成后自动换行,保留历史记录
|
|
1046
|
-
5. **双阶段进度**:版本更新和 NPM 发布分别显示进度
|
|
1047
|
-
|
|
1048
|
-
### 技术实现
|
|
1049
|
-
|
|
1050
|
-
- **进度计算**:`(current / total) * 100` 计算百分比
|
|
1051
|
-
- **进度条渲染**:使用 `█` 和 `░` 字符填充
|
|
1052
|
-
- **光标控制**:使用 `\r` 回车符实现原地更新
|
|
1053
|
-
- **状态管理**:维护 processing/success/failed 三种状态
|
|
1054
|
-
|
|
1055
|
-
### 注意事项
|
|
1056
|
-
|
|
1057
|
-
- 进度条仅在批量更新模式下显示
|
|
1058
|
-
- 单包更新不使用进度条(因为只有一个包)
|
|
1059
|
-
- Dry-run 模式不显示进度条(直接显示预览后退出)
|
|
1060
|
-
- 进度条宽度固定为 30 个字符,适应各种终端宽度
|
|
1061
|
-
|
|
1062
|
-
## ⚡ 性能优化(缓存机制)
|
|
1063
|
-
|
|
1064
|
-
mbump 内置了智能缓存机制,显著提升批量操作的性能,特别是在大型 Monorepo 项目中。
|
|
1065
|
-
|
|
1066
|
-
### 缓存策略
|
|
1067
|
-
|
|
1068
|
-
#### 1. 配置缓存
|
|
1069
|
-
|
|
1070
|
-
**功能**:避免重复读取和解析配置文件
|
|
1071
|
-
|
|
1072
|
-
**实现**:
|
|
1073
|
-
```typescript
|
|
1074
|
-
// 自动缓存配置
|
|
1075
|
-
const config = await loadConfigAsync(rootDir)
|
|
1076
|
-
|
|
1077
|
-
// 第二次调用直接使用缓存
|
|
1078
|
-
const config2 = await loadConfigAsync(rootDir) // 从缓存读取
|
|
1079
|
-
```
|
|
1080
|
-
|
|
1081
|
-
**缓存键**:项目根目录的绝对路径
|
|
1082
|
-
|
|
1083
|
-
**清除缓存**:
|
|
1084
|
-
```typescript
|
|
1085
|
-
import { clearConfigCache } from '@mznjs/mbump'
|
|
1086
|
-
|
|
1087
|
-
// 清除指定项目的缓存
|
|
1088
|
-
clearConfigCache('/path/to/project')
|
|
1089
|
-
|
|
1090
|
-
// 清除所有缓存
|
|
1091
|
-
clearConfigCache()
|
|
1092
|
-
```
|
|
1093
|
-
|
|
1094
|
-
#### 2. 包信息缓存
|
|
1095
|
-
|
|
1096
|
-
**功能**:预加载所有包信息到内存,避免重复读取 package.json 文件
|
|
1097
|
-
|
|
1098
|
-
**实现**:
|
|
1099
|
-
```typescript
|
|
1100
|
-
const manager = new VersionManager({ rootDir })
|
|
1101
|
-
|
|
1102
|
-
// 构造函数中自动预加载所有包信息
|
|
1103
|
-
// 后续调用 getPackageInfo() 直接从缓存读取
|
|
1104
|
-
```
|
|
1105
|
-
|
|
1106
|
-
**缓存管理 API**:
|
|
1107
|
-
|
|
1108
|
-
```typescript
|
|
1109
|
-
// 清除指定包的缓存
|
|
1110
|
-
manager.clearPackageCache('packages/components/package.json')
|
|
1111
|
-
|
|
1112
|
-
// 清除所有包缓存
|
|
1113
|
-
manager.clearPackageCache()
|
|
1114
|
-
|
|
1115
|
-
// 刷新指定包的缓存(重新从文件读取)
|
|
1116
|
-
const pkg = manager.refreshPackageCache('packages/components/package.json')
|
|
1117
|
-
|
|
1118
|
-
// 获取缓存统计信息
|
|
1119
|
-
const stats = manager.getCacheStats()
|
|
1120
|
-
console.log(stats)
|
|
1121
|
-
// {
|
|
1122
|
-
// size: 5,
|
|
1123
|
-
// packages: [
|
|
1124
|
-
// 'packages/components/package.json',
|
|
1125
|
-
// 'packages/cli/package.json',
|
|
1126
|
-
// ...
|
|
1127
|
-
// ]
|
|
1128
|
-
// }
|
|
1129
|
-
```
|
|
1130
|
-
|
|
1131
|
-
### 性能提升效果
|
|
1132
|
-
|
|
1133
|
-
#### 场景对比
|
|
1134
|
-
|
|
1135
|
-
**未使用缓存**:
|
|
1136
|
-
```bash
|
|
1137
|
-
# 批量更新 10 个包
|
|
1138
|
-
mbump all patch
|
|
1139
|
-
|
|
1140
|
-
# 每个包需要:
|
|
1141
|
-
# - 读取 package.json (10 次)
|
|
1142
|
-
# - 解析 JSON (10 次)
|
|
1143
|
-
# - 读取配置文件 (1 次)
|
|
1144
|
-
# 总计:21 次文件 I/O 操作
|
|
1145
|
-
```
|
|
1146
|
-
|
|
1147
|
-
**使用缓存后**:
|
|
1148
|
-
```bash
|
|
1149
|
-
# 批量更新 10 个包
|
|
1150
|
-
mbump all patch
|
|
1151
|
-
|
|
1152
|
-
# 优化后:
|
|
1153
|
-
# - 预加载所有 package.json (10 次,但并行执行)
|
|
1154
|
-
# - 后续操作全部从内存读取 (0 次 I/O)
|
|
1155
|
-
# - 配置文件缓存 (1 次)
|
|
1156
|
-
# 总计:11 次文件 I/O 操作,减少约 50%
|
|
1157
|
-
```
|
|
1158
|
-
|
|
1159
|
-
#### 实际测试数据
|
|
1160
|
-
|
|
1161
|
-
| 项目规模 | 包数量 | 优化前耗时 | 优化后耗时 | 提升 |
|
|
1162
|
-
|---------|--------|-----------|-----------|------|
|
|
1163
|
-
| 小型项目 | 3 个包 | 1.2s | 0.8s | 33% |
|
|
1164
|
-
| 中型项目 | 10 个包 | 3.5s | 1.8s | 49% |
|
|
1165
|
-
| 大型项目 | 50 个包 | 15.2s | 6.5s | 57% |
|
|
1166
|
-
|
|
1167
|
-
### 缓存失效场景
|
|
1168
|
-
|
|
1169
|
-
缓存在以下情况下会自动失效:
|
|
1170
|
-
|
|
1171
|
-
1. **文件修改**:当 `savePackageInfo()` 被调用时,会自动更新缓存
|
|
1172
|
-
2. **手动清除**:调用 `clearPackageCache()` 或 `clearConfigCache()`
|
|
1173
|
-
3. **进程重启**:缓存存储在内存中,进程退出后自动清除
|
|
1174
|
-
|
|
1175
|
-
### 最佳实践
|
|
1176
|
-
|
|
1177
|
-
#### 1. 批量操作前预加载
|
|
1178
|
-
|
|
1179
|
-
```typescript
|
|
1180
|
-
// VersionManager 构造函数已自动预加载
|
|
1181
|
-
const manager = new VersionManager({ rootDir })
|
|
1182
|
-
|
|
1183
|
-
// 无需额外操作,直接使用即可
|
|
1184
|
-
await manager.updateVersion('all', 'patch')
|
|
1185
|
-
```
|
|
1186
|
-
|
|
1187
|
-
#### 2. 长时间运行的进程
|
|
1188
|
-
|
|
1189
|
-
```typescript
|
|
1190
|
-
// 如果文件可能被外部修改,定期刷新缓存
|
|
1191
|
-
setInterval(() => {
|
|
1192
|
-
manager.clearPackageCache()
|
|
1193
|
-
}, 60000) // 每分钟清除一次缓存
|
|
1194
|
-
```
|
|
1195
|
-
|
|
1196
|
-
#### 3. CI/CD 环境
|
|
1197
|
-
|
|
1198
|
-
```typescript
|
|
1199
|
-
// CI/CD 环境中可以禁用缓存(每次都是全新环境)
|
|
1200
|
-
const manager = new VersionManager({
|
|
1201
|
-
rootDir,
|
|
1202
|
-
})
|
|
1203
|
-
```
|
|
1204
|
-
|
|
1205
|
-
#### 4. 调试模式
|
|
1206
|
-
|
|
1207
|
-
```bash
|
|
1208
|
-
# 启用调试模式查看缓存使用情况
|
|
1209
|
-
DEBUG=true mbump all patch
|
|
1210
|
-
|
|
1211
|
-
# 输出示例:
|
|
1212
|
-
# [DEBUG] 已预加载 5 个包的信息到缓存
|
|
1213
|
-
# [DEBUG] 使用缓存的配置
|
|
1214
|
-
# [DEBUG] 已缓存配置: /path/to/project
|
|
1215
|
-
```
|
|
1216
|
-
|
|
1217
|
-
### 技术实现细节
|
|
1218
|
-
|
|
1219
|
-
#### 配置缓存
|
|
1220
|
-
|
|
1221
|
-
```typescript
|
|
1222
|
-
// 全局 Map 存储配置
|
|
1223
|
-
const configCache = new Map<string, Config>()
|
|
1224
|
-
|
|
1225
|
-
// 缓存键:项目根目录的绝对路径
|
|
1226
|
-
const cacheKey = resolve(rootDir)
|
|
1227
|
-
|
|
1228
|
-
// 检查缓存
|
|
1229
|
-
if (configCache.has(cacheKey)) {
|
|
1230
|
-
return configCache.get(cacheKey)!
|
|
1231
|
-
}
|
|
1232
|
-
|
|
1233
|
-
// 设置缓存
|
|
1234
|
-
configCache.set(cacheKey, config)
|
|
1235
|
-
```
|
|
1236
|
-
|
|
1237
|
-
#### 包信息缓存
|
|
1238
|
-
|
|
1239
|
-
```typescript
|
|
1240
|
-
// 实例级 Map 存储包信息
|
|
1241
|
-
private packageCache: Map<string, PackageInfo> = new Map()
|
|
1242
|
-
|
|
1243
|
-
// 预加载
|
|
1244
|
-
private _preloadPackageCache(): void {
|
|
1245
|
-
for (const pkgPath of Object.values(this.packagePaths)) {
|
|
1246
|
-
this.getPackageInfo(pkgPath) // 触发缓存写入
|
|
1247
|
-
}
|
|
1248
|
-
}
|
|
1249
|
-
|
|
1250
|
-
// 读取(带缓存)
|
|
1251
|
-
private getPackageInfo(pkgPath: string): PackageInfo {
|
|
1252
|
-
const cached = this.packageCache.get(pkgPath)
|
|
1253
|
-
if (cached) {
|
|
1254
|
-
return cached // 缓存命中
|
|
1255
|
-
}
|
|
1256
|
-
|
|
1257
|
-
const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'))
|
|
1258
|
-
this.packageCache.set(pkgPath, pkg) // 写入缓存
|
|
1259
|
-
return pkg
|
|
1260
|
-
}
|
|
1261
|
-
```
|
|
1262
|
-
|
|
1263
|
-
### 注意事项
|
|
1264
|
-
|
|
1265
|
-
1. **内存占用**:缓存会占用一定内存,但对于大多数项目来说影响微乎其微
|
|
1266
|
-
2. **一致性**:如果外部工具修改了 package.json,需要手动清除缓存
|
|
1267
|
-
3. **线程安全**:当前实现不是线程安全的,建议在单线程环境中使用
|
|
1268
|
-
4. **缓存大小**:没有设置最大缓存限制,理论上可以缓存无限数量的包
|
|
1269
|
-
|
|
1270
|
-
### 未来优化方向
|
|
1271
|
-
|
|
1272
|
-
- [ ] 添加 LRU 缓存策略,限制最大缓存数量
|
|
1273
|
-
- [ ] 支持文件系统监听,自动检测文件变化并更新缓存
|
|
1274
|
-
- [ ] 添加缓存持久化选项,跨进程共享缓存
|
|
1275
|
-
- [ ] 提供缓存命中率统计,帮助性能分析
|
|
1276
|
-
|
|
1277
|
-
## 🧪 测试
|
|
1278
|
-
|
|
1279
|
-
mbump 拥有完善的测试体系,包括单元测试和集成测试,确保代码质量和功能稳定性。
|
|
1280
|
-
|
|
1281
|
-
### 测试覆盖范围
|
|
1282
|
-
|
|
1283
|
-
#### 单元测试 (Unit Tests)
|
|
1284
|
-
- ✅ **版本计算**:验证 semver 版本递增逻辑
|
|
1285
|
-
- ✅ **安全检查**:验证路径遍历防护、命令注入防护
|
|
1286
|
-
- ✅ **工具函数**:验证各种辅助函数的正确性
|
|
1287
|
-
|
|
1288
|
-
#### 集成测试 (Integration Tests)
|
|
1289
|
-
- ✅ **单包版本更新**:验证单个包的版本号更新流程
|
|
1290
|
-
- ✅ **批量版本更新**:验证多个包同时更新的场景
|
|
1291
|
-
- ✅ **CHANGELOG 生成**:验证 CHANGELOG.md 文件的创建和内容
|
|
1292
|
-
- ✅ **Git Tag 管理**:验证 Git 标签的创建、前缀配置等
|
|
1293
|
-
- ✅ **Dry-run 模式**:验证试运行模式不修改文件
|
|
1294
|
-
- ✅ **缓存机制**:验证配置缓存和包信息缓存
|
|
1295
|
-
- ✅ **错误处理**:验证无效包名、版本冲突等异常场景
|
|
1296
|
-
|
|
1297
|
-
### 运行测试
|
|
1298
|
-
|
|
1299
|
-
```bash
|
|
1300
|
-
# 运行所有测试
|
|
1301
|
-
pnpm test
|
|
1302
|
-
|
|
1303
|
-
# 运行特定测试文件
|
|
1304
|
-
pnpm test tests/integration.test.ts
|
|
1305
|
-
|
|
1306
|
-
# 监听模式(开发时使用)
|
|
1307
|
-
pnpm test:watch
|
|
1308
|
-
```
|
|
1309
|
-
|
|
1310
|
-
### 测试统计
|
|
1311
|
-
|
|
1312
|
-
| 测试类型 | 测试文件数 | 测试用例数 | 通过率 |
|
|
1313
|
-
|---------|-----------|-----------|--------|
|
|
1314
|
-
| 单元测试 | 2 | 12 | 100% ✅ |
|
|
1315
|
-
| 集成测试 | 1 | 16 | 100% ✅ |
|
|
1316
|
-
| **总计** | **3** | **28** | **100%** ✅ |
|
|
1317
|
-
|
|
1318
|
-
### 集成测试特点
|
|
1319
|
-
|
|
1320
|
-
#### 1. 隔离环境
|
|
1321
|
-
每个测试在临时目录中执行,避免污染真实项目:
|
|
1322
|
-
```typescript
|
|
1323
|
-
beforeEach(() => {
|
|
1324
|
-
tempDir = join(os.tmpdir(), `mbump-test-${Date.now()}`)
|
|
1325
|
-
mkdirSync(tempDir, { recursive: true })
|
|
1326
|
-
})
|
|
1327
|
-
|
|
1328
|
-
afterEach(() => {
|
|
1329
|
-
rmSync(tempDir, { recursive: true, force: true })
|
|
1330
|
-
})
|
|
1331
|
-
```
|
|
1332
|
-
|
|
1333
|
-
#### 2. 完整工作流
|
|
1334
|
-
测试完整的版本更新流程:
|
|
1335
|
-
- 创建临时 Git 仓库
|
|
1336
|
-
- 创建 package.json 和配置文件
|
|
1337
|
-
- 执行版本更新
|
|
1338
|
-
- 验证结果(版本号、Git Tag、CHANGELOG)
|
|
1339
|
-
- 清理临时文件
|
|
1340
|
-
|
|
1341
|
-
#### 3. 真实场景
|
|
1342
|
-
使用真实的 Git 命令和文件系统操作:
|
|
1343
|
-
```typescript
|
|
1344
|
-
execSync('git init', { cwd: tempDir })
|
|
1345
|
-
execSync('git config user.email "test@example.com"', { cwd: tempDir })
|
|
1346
|
-
execSync('git add . && git commit -m "feat: feature"', { cwd: tempDir })
|
|
1347
|
-
const tags = execSync('git tag', { cwd: tempDir, encoding: 'utf8' })
|
|
1348
|
-
```
|
|
1349
|
-
|
|
1350
|
-
### 持续集成
|
|
1351
|
-
|
|
1352
|
-
测试已集成到 CI/CD 流程中,每次提交都会自动运行:
|
|
1353
|
-
- ✅ 代码构建
|
|
1354
|
-
- ✅ 类型检查
|
|
1355
|
-
- ✅ ESLint 检查
|
|
1356
|
-
- ✅ 单元测试
|
|
1357
|
-
- ✅ 集成测试
|
|
1358
|
-
|
|
1359
|
-
## 📊 版本类型
|
|
1360
|
-
|
|
1361
|
-
### 标准版本类型
|
|
1362
|
-
- **major**: 主版本号(不兼容的 API 修改)
|
|
1363
|
-
- **minor**: 次版本号(向下兼容的功能性新增)
|
|
1364
|
-
- **patch**: 修订号(向下兼容的问题修正)
|
|
1365
|
-
|
|
1366
|
-
### 预发布版本类型
|
|
1367
|
-
- **pre-major**: 预发布主版本
|
|
1368
|
-
- **pre-minor**: 预发布次版本
|
|
1369
|
-
- **pre-patch**: 预发布修订版本
|
|
1370
|
-
- **prerelease**: 预发布版本
|
|
1371
|
-
- **next**: 下一个预发布版本
|
|
1372
|
-
|
|
1373
|
-
### 特殊版本类型
|
|
1374
|
-
- **conventional**: 根据 commits 自动生成版本类型
|
|
1375
|
-
- **as-is**: 保持当前版本不变(仅更新 CHANGELOG)
|
|
1376
|
-
|
|
1377
|
-
## 🎯 使用场景
|
|
1378
|
-
|
|
1379
|
-
### 场景 1: 日常开发
|
|
1380
|
-
|
|
1381
|
-
```bash
|
|
1382
|
-
# 修复 bug 后发布补丁版本
|
|
1383
|
-
mbump patch
|
|
1384
|
-
|
|
1385
|
-
# 添加新功能后发布小版本
|
|
1386
|
-
mbump minor
|
|
1387
|
-
|
|
1388
|
-
# 重大重构后发布主版本
|
|
1389
|
-
mbump major
|
|
1390
|
-
```
|
|
1391
|
-
|
|
1392
|
-
### 场景 2: 预发布测试
|
|
1393
|
-
|
|
1394
|
-
```bash
|
|
1395
|
-
# 创建 beta 版本进行测试
|
|
1396
|
-
mbump pre-minor
|
|
1397
|
-
|
|
1398
|
-
# 创建 rc 版本(需要自定义)
|
|
1399
|
-
mbump custom
|
|
1400
|
-
# 输入: 1.0.0-rc.1
|
|
1401
|
-
```
|
|
1402
|
-
|
|
1403
|
-
### 场景 3: Monorepo 批量更新
|
|
1404
|
-
|
|
1405
|
-
```bash
|
|
1406
|
-
# 交互式选择每个包的版本
|
|
1407
|
-
mbump all
|
|
1408
|
-
|
|
1409
|
-
# 统一升级所有包的补丁版本
|
|
1410
|
-
mbump all patch
|
|
1411
|
-
|
|
1412
|
-
# 试运行查看将要执行的变更
|
|
1413
|
-
mbump all minor --dry-run
|
|
1414
|
-
```
|
|
1415
|
-
|
|
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 自动化
|
|
1433
|
-
|
|
1434
|
-
```bash
|
|
1435
|
-
# 在 CI 环境中自动发布
|
|
1436
|
-
mbump components patch --npm --no-commit
|
|
1437
|
-
|
|
1438
|
-
# 跳过未提交检查
|
|
1439
|
-
mbump core minor --allow-uncommitted
|
|
1440
|
-
```
|
|
1441
|
-
|
|
1442
|
-
## 🔍 调试与诊断
|
|
1443
|
-
|
|
1444
|
-
### 查看详细日志
|
|
1445
|
-
|
|
1446
|
-
```bash
|
|
1447
|
-
mbump components patch --verbose
|
|
1448
|
-
```
|
|
1449
|
-
|
|
1450
|
-
### 查看当前配置
|
|
1451
|
-
|
|
1452
|
-
```bash
|
|
1453
|
-
mbump --show-config
|
|
1454
|
-
```
|
|
1455
|
-
|
|
1456
|
-
输出示例:
|
|
1457
|
-
```
|
|
1458
|
-
📋 当前加载的配置:
|
|
1459
|
-
|
|
1460
|
-
配置文件: .mbump.config.mjs
|
|
1461
|
-
|
|
1462
|
-
📦 包路径:
|
|
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
|
|
1466
|
-
|
|
1467
|
-
⚙️ 默认选项:
|
|
1468
|
-
releaseType: patch
|
|
1469
|
-
dryRun: false
|
|
1470
|
-
verbose: false
|
|
1471
|
-
allowUncommitted: false
|
|
1472
|
-
npm: false
|
|
1473
|
-
|
|
1474
|
-
🔧 Git 选项:
|
|
1475
|
-
commit: true
|
|
1476
|
-
push: true
|
|
1477
|
-
tag: true
|
|
1478
|
-
changelog: true
|
|
1479
|
-
|
|
1480
|
-
🚀 发布选项:
|
|
1481
|
-
command: pnpm publish --access public --no-git-checks
|
|
1482
|
-
skipChecks: true
|
|
1483
|
-
```
|
|
1484
|
-
|
|
1485
|
-
### 试运行模式
|
|
1486
|
-
|
|
1487
|
-
```bash
|
|
1488
|
-
# 预览将要执行的操作,不实际修改文件
|
|
1489
|
-
mbump components minor --dry-run
|
|
1490
|
-
```
|
|
1491
|
-
|
|
1492
|
-
## 🏷️ Git Tag 策略详解
|
|
1493
|
-
|
|
1494
|
-
mbump 采用智能的 Git Tag 策略,根据包的类型自动选择合适的命名格式:
|
|
1495
|
-
|
|
1496
|
-
### 主项目包 (default / root package)
|
|
1497
|
-
|
|
1498
|
-
主项目包通常对应根目录的 `package.json`,配置为 `"default": "package.json"`。
|
|
1499
|
-
|
|
1500
|
-
```bash
|
|
1501
|
-
mbump default patch
|
|
1502
|
-
# 或简写为
|
|
1503
|
-
mbump patch # 如果默认包名为 default
|
|
1504
|
-
```
|
|
1505
|
-
|
|
1506
|
-
**Tag 格式**:`{tagPrefix}{version}`
|
|
1507
|
-
- 默认前缀:`v`
|
|
1508
|
-
- 示例:`v1.0.1`, `v2.3.0`, `release-3.0.0`
|
|
1509
|
-
|
|
1510
|
-
**行为**:
|
|
1511
|
-
- ✅ 自动创建带注释的 Git Tag
|
|
1512
|
-
- ✅ 推送到远程仓库(如果 `git.push = true`)
|
|
1513
|
-
- ✅ 使用配置的 `tagPrefix`(可通过 `git.tagPrefix` 自定义)
|
|
1514
|
-
|
|
1515
|
-
**自定义前缀示例**:
|
|
1516
|
-
```json
|
|
1517
|
-
{
|
|
1518
|
-
"git": {
|
|
1519
|
-
"tagPrefix": "release-"
|
|
1520
|
-
}
|
|
1521
|
-
}
|
|
1522
|
-
```
|
|
1523
|
-
```bash
|
|
1524
|
-
mbump default minor
|
|
1525
|
-
# → 创建 Tag: release-1.1.0
|
|
1526
|
-
```
|
|
1527
|
-
|
|
1528
|
-
---
|
|
1529
|
-
|
|
1530
|
-
### 子包 (所有非主项目包)
|
|
1531
|
-
|
|
1532
|
-
子包包括所有在 `packagePaths` 中配置的非主项目包。
|
|
1533
|
-
|
|
1534
|
-
#### 单独更新子包
|
|
1535
|
-
|
|
1536
|
-
```bash
|
|
1537
|
-
mbump components patch
|
|
1538
|
-
mbump cli minor
|
|
1539
|
-
```
|
|
1540
|
-
|
|
1541
|
-
**Tag 格式**:`{package-name}@{version}`
|
|
1542
|
-
- **不使用** `tagPrefix` 配置
|
|
1543
|
-
- 直接使用 `package.json` 中的 `name` 字段
|
|
1544
|
-
- 为更新的包创建独立标签
|
|
1545
|
-
|
|
1546
|
-
**示例**:
|
|
1547
|
-
```bash
|
|
1548
|
-
mbump components patch
|
|
1549
|
-
# 假设 components/package.json 中 "name": "@my-org/components"
|
|
1550
|
-
# → 创建 Tag: @my-org/components@1.0.1
|
|
1551
|
-
|
|
1552
|
-
mbump cli minor
|
|
1553
|
-
# 假设 cli/package.json 中 "name": "@my-org/cli"
|
|
1554
|
-
# → 创建 Tag: @my-org/cli@2.3.0
|
|
1555
|
-
```
|
|
1556
|
-
|
|
1557
|
-
---
|
|
1558
|
-
|
|
1559
|
-
#### Monorepo 批量更新
|
|
1560
|
-
|
|
1561
|
-
```bash
|
|
1562
|
-
mbump all
|
|
1563
|
-
```
|
|
1564
|
-
|
|
1565
|
-
**Tag 格式**:`{package-name}@{version}`
|
|
1566
|
-
- 不使用 `tagPrefix` 配置
|
|
1567
|
-
- 为每个更新的**子包**创建独立标签
|
|
1568
|
-
- **主项目包**仍然使用 `{tagPrefix}{version}` 格式
|
|
1569
|
-
|
|
1570
|
-
**示例**:
|
|
1571
|
-
假设有以下包被更新:
|
|
1572
|
-
- `default` (主项目): 1.0.0 → 1.0.1
|
|
1573
|
-
- `components`: 1.0.0 → 1.0.1
|
|
1574
|
-
- `cli`: 2.2.0 → 2.3.0
|
|
1575
|
-
- `core`: 0.5.1 → 0.5.2
|
|
1576
|
-
|
|
1577
|
-
将创建以下 Tags:
|
|
1578
|
-
```
|
|
1579
|
-
v1.0.1 # 主项目包,使用 tagPrefix
|
|
1580
|
-
components@1.0.1 # 子包
|
|
1581
|
-
cli@2.3.0 # 子包
|
|
1582
|
-
core@0.5.2 # 子包
|
|
1583
|
-
```
|
|
1584
|
-
|
|
1585
|
-
**优势**:
|
|
1586
|
-
- ✅ 清晰区分主项目和子包的版本历史
|
|
1587
|
-
- ✅ 主项目保持简洁的 `v1.0.1` 格式
|
|
1588
|
-
- ✅ 子包使用明确的 `{包名}@{版本号}` 格式
|
|
1589
|
-
- ✅ 便于单独回滚某个包到特定版本
|
|
1590
|
-
- ✅ 符合 Monorepo 最佳实践(类似 pnpm、lerna)
|
|
1591
|
-
- ✅ 支持独立的 CI/CD 流程
|
|
1592
|
-
|
|
1593
|
-
---
|
|
1594
|
-
|
|
1595
|
-
### Git 操作示例
|
|
1596
|
-
|
|
1597
|
-
```bash
|
|
1598
|
-
# 查看所有 tags
|
|
1599
|
-
git tag -l
|
|
1600
|
-
|
|
1601
|
-
# 查看主项目的 tags
|
|
1602
|
-
git tag -l "v*"
|
|
1603
|
-
|
|
1604
|
-
# 查看特定子包的 tags
|
|
1605
|
-
git tag -l "components@*"
|
|
1606
|
-
|
|
1607
|
-
# 查看所有子包的 tags
|
|
1608
|
-
git tag -l "*@*"
|
|
1609
|
-
|
|
1610
|
-
# 检出主项目的特定版本
|
|
1611
|
-
git checkout v1.0.1
|
|
1612
|
-
|
|
1613
|
-
# 检出子包的特定版本
|
|
1614
|
-
git checkout components@1.0.1
|
|
1615
|
-
|
|
1616
|
-
# 推送所有 tags
|
|
1617
|
-
git push --tags
|
|
1618
|
-
```
|
|
1619
|
-
|
|
1620
|
-
---
|
|
1621
|
-
|
|
1622
|
-
### 禁用 Tag 创建
|
|
1623
|
-
|
|
1624
|
-
如果不需要自动创建 Tag,可以在配置中禁用:
|
|
1625
|
-
|
|
1626
|
-
```json
|
|
1627
|
-
{
|
|
1628
|
-
"git": {
|
|
1629
|
-
"tag": false
|
|
1630
|
-
}
|
|
1631
|
-
}
|
|
1632
|
-
```
|
|
1633
|
-
|
|
1634
|
-
这将禁用所有包(包括主项目和子包)的自动 Tag 创建。
|
|
1635
|
-
|
|
1636
|
-
---
|
|
1637
|
-
|
|
1638
|
-
### 注意事项
|
|
1639
|
-
|
|
1640
|
-
1. **主项目包识别**:系统通过以下方式判断是否为主项目包:
|
|
1641
|
-
- 包名为 `default`
|
|
1642
|
-
- 或者包路径为 `package.json`(根目录)
|
|
1643
|
-
|
|
1644
|
-
2. **子包命名**:子包的 Tag 名称直接来自其 `package.json` 中的 `name` 字段,可能包含 scope(如 `@my-org/components`)
|
|
1645
|
-
|
|
1646
|
-
3. **Tag 唯一性**:Git 要求所有 Tag 名称唯一,因此不同包即使版本号相同,也会因为包名不同而产生不同的 Tag
|
|
1647
|
-
|
|
1648
|
-
4. **批量更新行为**:使用 `mbump all` 时,所有更改会在一次 commit 中提交,然后为每个包创建独立的 Tag
|
|
1649
|
-
|
|
1650
|
-
## ⚠️ 注意事项
|
|
1651
|
-
|
|
1652
|
-
1. **Git 要求**: 确保项目在 Git 仓库中,且已配置用户信息
|
|
1653
|
-
2. **未提交更改**: 默认情况下,存在未提交更改时会提示确认
|
|
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`
|
|
1663
|
-
|
|
1664
|
-
## 📚 更多资源
|
|
1665
|
-
|
|
1666
|
-
- [配置示例](./config-examples/) - 各种格式的配置文件示例
|
|
1667
|
-
- [CHANGELOG](./CHANGELOG.md) - 版本更新历史
|
|
1668
|
-
|
|
1669
|
-
## 🤝 贡献指南
|
|
1670
|
-
|
|
1671
|
-
欢迎为 mbump 贡献代码!请遵循以下步骤:
|
|
1672
|
-
|
|
1673
|
-
1. Fork 本仓库
|
|
1674
|
-
2. 创建特性分支 (`git checkout -b feature/amazing-feature`)
|
|
1675
|
-
3. 提交更改 (`git commit -m 'Add some amazing feature'`)
|
|
1676
|
-
4. 推送到分支 (`git push origin feature/amazing-feature`)
|
|
1677
|
-
5. 开启 Pull Request
|
|
1678
|
-
|
|
1679
|
-
### 开发要求
|
|
1680
494
|
- Node.js >= 18.0.0
|
|
1681
495
|
- 所有测试必须通过
|
|
1682
496
|
- 代码必须符合 ESLint 规范
|
|
1683
|
-
- 新功能必须包含测试用例
|
|
1684
497
|
|
|
1685
498
|
## 📄 许可证
|
|
1686
499
|
|
|
@@ -1688,7 +501,7 @@ MIT License
|
|
|
1688
501
|
|
|
1689
502
|
## 👥 作者
|
|
1690
503
|
|
|
1691
|
-
|
|
504
|
+
**mznjs Team** - [GitHub](https://github.com/mznjs)
|
|
1692
505
|
|
|
1693
506
|
## 🙏 致谢
|
|
1694
507
|
|
|
@@ -1700,4 +513,4 @@ MIT License
|
|
|
1700
513
|
|
|
1701
514
|
---
|
|
1702
515
|
|
|
1703
|
-
**mbump** - 让版本管理更简单!🚀
|
|
516
|
+
**mbump** - 让版本管理更简单!🚀
|