fe-build-cli 1.2.5 → 1.6.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/README.md CHANGED
@@ -5,10 +5,15 @@
5
5
  ## 功能特性
6
6
 
7
7
  - ✅ 多服务器环境部署
8
- - ✅ 两种发布模式:主分支发布 / 当前分支发布
8
+ - ✅ 三种发布模式:主分支发布 / 当前分支发布 / Test 环境发布
9
9
  - ✅ Git 分支自动合并流程
10
+ - ✅ 智能处理本地改动(自动提交或 stash 储藏)
10
11
  - ✅ SSH 远程部署(带进度条)
11
12
  - ✅ 自动备份与回滚
13
+ - ✅ 线上备份下载到本地(保留 7 天)
14
+ - ✅ 详细日志记录(每一步操作及状态)
15
+ - ✅ 错误日志单独保存
16
+ - ✅ 钉钉通知(成功/失败)
12
17
  - ✅ 保护目录(部署时不删除指定目录)
13
18
  - ✅ TypeScript 类型支持
14
19
 
@@ -106,9 +111,12 @@ fe-build [deploy] [环境] [选项]
106
111
  | `环境` | 目标环境名称(如 production、test),或 `all` 部署到所有环境 |
107
112
  | `--config <路径>` | 指定配置文件路径 |
108
113
  | `--current-branch` | 使用当前分支发布(不切换分支) |
114
+ | `--test-branch` | 使用 Test 环境发布流程(智能处理本地改动) |
115
+ | `--merge` | Test 发布时合并本地改动 |
116
+ | `--no-merge` | Test 发布时使用 stash 储藏改动 |
109
117
  | `--main-branch` | 使用主分支发布流程 |
110
118
  | `--skip-build` | 跳过构建步骤 |
111
- | `--no-push` | 主分支发布时不推送到远程 |
119
+ | `--no-push` | 发布时不推送到远程 |
112
120
 
113
121
  **示例:**
114
122
 
@@ -122,6 +130,15 @@ fe-build deploy production
122
130
  # 当前分支发布(不切换分支)
123
131
  fe-build --current-branch
124
132
 
133
+ # Test 环境发布(智能处理本地改动)
134
+ fe-build --test-branch
135
+
136
+ # Test 发布,合并本地改动
137
+ fe-build --test-branch --merge
138
+
139
+ # Test 发布,stash 储藏改动
140
+ fe-build --test-branch --no-merge
141
+
125
142
  # 主分支发布流程
126
143
  fe-build --main-branch
127
144
 
@@ -135,24 +152,122 @@ fe-build --config ./custom-config.js
135
152
  ### rollback(回滚)
136
153
 
137
154
  ```bash
138
- fe-build rollback [环境] [--version <版本号>]
155
+ fe-build rollback [环境] [--server|--local] [--version <版本号>]
139
156
  ```
140
157
 
141
158
  | 参数 | 说明 |
142
159
  |------|------|
143
160
  | `环境` | 目标环境名称 |
144
- | `--version <版本号>` | 指定回滚版本(可选,默认回滚到上一版本) |
161
+ | `--server` | 使用服务器备份(默认) |
162
+ | `--local` | 使用本地备份 |
163
+ | `--version <版本号>` | 指定回滚版本(可选) |
164
+
165
+ **回滚流程:**
166
+
167
+ 1. 获取备份列表(服务器和本地)
168
+ 2. 选择备份来源(默认服务器)
169
+ 3. 从备份列表中选择要回滚的版本
170
+ 4. 执行回滚
145
171
 
146
172
  **示例:**
147
173
 
148
174
  ```bash
149
- # 回滚生产环境到上一版本
175
+ # 回滚生产环境(交互选择备份来源和版本)
150
176
  fe-build rollback production
151
177
 
178
+ # 回滚生产环境(使用服务器备份)
179
+ fe-build rollback production --server
180
+
181
+ # 回滚生产环境(使用本地备份)
182
+ fe-build rollback production --local
183
+
152
184
  # 回滚到指定版本
153
185
  fe-build rollback production --version build-20240101-abc123
154
186
  ```
155
187
 
188
+ **备份列表显示:**
189
+
190
+ ```
191
+ ========================================
192
+ 📦 选择备份来源
193
+ ========================================
194
+ 1. 服务器备份 (5 个) - 默认
195
+ 2. 本地备份 (3 个)
196
+ ========================================
197
+ 请选择备份来源 (1/2): 1
198
+
199
+ ========================================
200
+ 📦 服务器备份列表
201
+ ========================================
202
+ 1. 20260618-abc123 (12.5 MB) - 2026/6/18
203
+ 2. 20260617-def456 (11.8 MB) - 2026/6/17
204
+ 3. 20260616-ghi789 (10.2 MB) - 2026/6/16
205
+ ========================================
206
+ 请选择要回滚的备份 (1-3):
207
+ ```
208
+
209
+ ### update(更新)
210
+
211
+ ```bash
212
+ fe-build update [--force|--auto]
213
+ fe-build check-update
214
+ ```
215
+
216
+ | 参数 | 说明 |
217
+ |------|------|
218
+ | `--force` | 自动更新,无需确认 |
219
+ | `--auto` | 自动更新,无需确认(同 --force) |
220
+
221
+ **功能说明:**
222
+
223
+ - `update` - 检查并更新到最新版本(交互确认)
224
+ - `update --force` - 自动更新,无需确认
225
+ - `check-update` - 仅检查是否有新版本
226
+
227
+ **示例:**
228
+
229
+ ```bash
230
+ # 检查并更新(需要确认)
231
+ fe-build update
232
+
233
+ # 自动更新(无需确认)
234
+ fe-build update --force
235
+ fe-build update --auto
236
+
237
+ # 仅检查是否有更新
238
+ fe-build check-update
239
+
240
+ # 手动更新(推荐)
241
+ npm update fe-build-cli --global
242
+ ```
243
+
244
+ **更新输出示例:**
245
+
246
+ ```
247
+ ========================================
248
+ 🔄 fe-build-cli 版本检查
249
+ ========================================
250
+ 当前版本: 1.5.0
251
+ 最新版本: 1.6.0
252
+
253
+ 📌 发现新版本!
254
+
255
+ 更新方法:
256
+ fe-build update # 自动更新
257
+ npm update fe-build-cli --global # 手动更新
258
+ ========================================
259
+ ```
260
+
261
+ ### version(版本)
262
+
263
+ ```bash
264
+ fe-build version
265
+ fe-build --version
266
+ fe-build -v
267
+ ```
268
+
269
+ 显示当前安装的版本号。
270
+
156
271
  ### help(帮助)
157
272
 
158
273
  ```bash
@@ -163,7 +278,7 @@ fe-build -h
163
278
 
164
279
  ## 发布模式详解
165
280
 
166
- ### 主分支发布模式(默认)
281
+ ### 主分支发布模式
167
282
 
168
283
  流程:当前分支 → 测试分支 → 主分支 → 部署
169
284
 
@@ -185,7 +300,49 @@ fe-build -h
185
300
  6. 合并测试分支到主分支
186
301
  7. 推送主分支到远程
187
302
  8. 执行构建和部署
188
- 9. 可选择切回原分支
303
+ 9. 自动切回原分支
304
+
305
+ ### Test 环境发布模式(智能处理本地改动)
306
+
307
+ 流程:智能处理本地改动 → Test 分支 → 部署
308
+
309
+ **适用场景:** 发布到 Test 环境,自动处理本地未提交的改动
310
+
311
+ **智能处理策略:**
312
+
313
+ | 情况 | 处理方式 |
314
+ |------|---------|
315
+ | 当前已在 test 分支 | 直接拉取最新代码,无需切换 |
316
+ | 当前分支 ≠ test,无本地改动 | 直接切换到 test 分支发布 |
317
+ | 当前分支 ≠ test,有本地改动 | 选择合并或 stash |
318
+
319
+ **有本地改动时的选项:**
320
+
321
+ 1. **合并改动**(`--merge`):
322
+ - 自动提交当前分支改动
323
+ - 推送当前分支到远程
324
+ - 切换到 test 分支
325
+ - 合并当前分支到 test
326
+ - 推送 test 分支
327
+ - 部署完成后自动切回原分支
328
+
329
+ 2. **Stash 储藏**(`--no-merge`):
330
+ - 储藏本地改动
331
+ - 切换到 test 分支发布
332
+ - 部署完成后询问是否切回原分支
333
+ - 切回后自动恢复 stash
334
+
335
+ **示例:**
336
+ ```bash
337
+ # Test 环境发布(交互选择处理方式)
338
+ fe-build --test-branch
339
+
340
+ # Test 发布,合并本地改动
341
+ fe-build --test-branch --merge
342
+
343
+ # Test 发布,stash 储藏改动
344
+ fe-build --test-branch --no-merge
345
+ ```
189
346
 
190
347
  ### 当前分支发布模式
191
348
 
@@ -248,10 +405,15 @@ export default {
248
405
  // 备份保留数量(可选,默认 1)
249
406
  backupRetentionCount: 3,
250
407
 
408
+ // 日志配置(可选)
409
+ logDir: 'logs', // 日志目录,默认 'logs'
410
+ localBackupDir: 'D:\\备份', // 本地备份目录,默认 'D:\备份'
411
+
251
412
  // 钉钉通知配置(可选)
252
413
  dingtalk: {
253
414
  webhook: 'https://oapi.dingtalk.com/robot/send?access_token=your-token', // 钉钉机器人 webhook
254
- enabled: true // 是否启用通知,默认 true
415
+ keyword: '部署', // 安全设置关键词(可选)
416
+ enabled: true // 是否启用通知,默认 true
255
417
  }
256
418
  };
257
419
  ```
@@ -276,7 +438,10 @@ export default {
276
438
  | `servers[key].buildCommand` | string | 否 | 自定义构建命令 |
277
439
  | `servers[key].protectedDirs` | string[] | 否 | 保护目录列表 |
278
440
  | `backupRetentionCount` | number | 否 | 备份保留数量,默认 1 |
441
+ | `logDir` | string | 否 | 日志目录,默认 'logs' |
442
+ | `localBackupDir` | string | 否 | 本地备份目录,默认 'D:\备份' |
279
443
  | `dingtalk.webhook` | string | 否 | 钉钉机器人 webhook URL |
444
+ | `dingtalk.keyword` | string | 否 | 安全设置关键词 |
280
445
  | `dingtalk.enabled` | boolean | 否 | 是否启用通知,默认 true |
281
446
 
282
447
  ## 钉钉通知
@@ -308,15 +473,149 @@ dingtalk: {
308
473
 
309
474
  环境: production
310
475
  状态: ✅ 成功
311
- 时间: 2024-01-01 10:30:00
476
+ 时间: 2026/06/18 10:30:00
477
+
478
+ ---
479
+
480
+ ### 部署详情
312
481
 
313
- 构建版本: build-20240101-abc123
482
+ 构建版本: build-20260618-abc123
314
483
  发布分支: main
315
484
  发布模式: 主分支发布
316
485
  服务器: 101.44.66.5
317
486
  部署耗时: 120秒
318
487
 
319
- 访问地址: https://www.example.com
488
+ ---
489
+
490
+ ### 本次修改内容
491
+
492
+ feat: 新增用户管理模块
493
+
494
+ ---
495
+
496
+ ### 访问地址
497
+
498
+ https://www.example.com
499
+
500
+ > 部署完成,请及时验证功能是否正常。
501
+ ```
502
+
503
+ 部署失败通知:
504
+
505
+ ```
506
+ ❌ 部署失败通知
507
+
508
+ 环境: production
509
+ 状态: ❌ 失败
510
+ 时间: 2026/06/18 10:30:00
511
+
512
+ ---
513
+
514
+ ### 失败详情
515
+
516
+ 构建版本: build-20260618-abc123
517
+ 发布分支: main
518
+ 服务器: 101.44.66.5
519
+
520
+ ---
521
+
522
+ ### 本次修改内容
523
+
524
+ feat: 新增用户管理模块
525
+
526
+ ---
527
+
528
+ ### 错误信息
529
+
530
+ SSH 连接失败: Connection refused
531
+
532
+ > 请及时排查问题并重新部署。
533
+ ```
534
+
535
+ ## 日志记录
536
+
537
+ 每次部署都会自动记录详细的操作日志,包括每一步的执行状态。
538
+
539
+ ### 日志内容
540
+
541
+ 日志记录以下操作:
542
+
543
+ | 操作类型 | 记录内容 |
544
+ |---------|---------|
545
+ | 分支操作 | 切换分支(从哪个分支切换到哪个分支) |
546
+ | 代码合并 | 源分支→目标分支,是否有冲突 |
547
+ | Stash 操作 | 储藏/恢复本地改动 |
548
+ | 项目构建 | 构建模式、版本号、耗时 |
549
+ | 文件压缩 | 压缩包大小 |
550
+ | SSH 连接 | 服务器地址、连接状态 |
551
+ | 文件上传 | 本地路径、远程路径、大小、耗时、速度 |
552
+ | 备份操作 | 服务器备份/本地下载 |
553
+ | 部署解压 | 部署目录 |
554
+ | 钉钉通知 | 发送成功/失败 |
555
+
556
+ ### 日志文件
557
+
558
+ **存储位置**:`logs` 目录(可通过 `logDir` 配置)
559
+
560
+ **文件格式**:
561
+ ```
562
+ deploy-2026-06-18-10-30-45-success.json # 成功日志
563
+ deploy-2026-06-18-10-30-45-failed.json # 失败日志
564
+ error-2026-06-18-10-30-45.json # 错误日志(单独保存)
565
+ ```
566
+
567
+ **日志内容示例**:
568
+ ```json
569
+ {
570
+ "summary": {
571
+ "startTime": "2026/06/18 10:30:45",
572
+ "endTime": "2026/06/18 10:35:20",
573
+ "duration": 275,
574
+ "status": "success",
575
+ "totalSteps": 15,
576
+ "successSteps": 15,
577
+ "failedSteps": 0
578
+ },
579
+ "logs": [
580
+ {
581
+ "timestamp": "2026/06/18 10:30:45",
582
+ "level": "SUCCESS",
583
+ "step": "分支操作",
584
+ "message": "切换分支: feature-xxx → test, 成功",
585
+ "data": { "action": "切换分支", "fromBranch": "feature-xxx", "toBranch": "test" }
586
+ }
587
+ // ... 更多日志
588
+ ]
589
+ }
590
+ ```
591
+
592
+ ### 错误日志
593
+
594
+ 部署失败时,错误日志会单独保存一份,便于快速定位问题:
595
+ - 包含完整的错误信息
596
+ - 包含所有操作日志
597
+ - 文件名以 `error-` 开头
598
+
599
+ ## 线上备份下载
600
+
601
+ 部署完成后,线上备份会自动下载到本地保存。
602
+
603
+ ### 配置
604
+
605
+ ```javascript
606
+ // 本地备份目录(默认:D:\备份)
607
+ localBackupDir: 'D:\\备份'
608
+ ```
609
+
610
+ ### 自动清理
611
+
612
+ 本地备份自动保留 **7 天**,超过 7 天的备份文件会被自动清理。
613
+
614
+ ### 备份文件命名
615
+
616
+ ```
617
+ backup-production-build-20260618-abc123.tar.gz
618
+ backup-test-build-20260618-def456.tar.gz
320
619
  ```
321
620
 
322
621
  ## 部署流程详解
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fe-build-cli",
3
- "version": "1.2.5",
3
+ "version": "1.6.0",
4
4
  "description": "前端项目打包部署 CLI 工具,支持多服务器部署、分支管理、回滚、钉钉通知、智能处理本地改动等功能",
5
5
  "type": "module",
6
6
  "main": "src/index.js",