esa-cli 0.0.2-beta.10 → 0.0.2-beta.13

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.
Files changed (75) hide show
  1. package/dist/commands/commit/index.js +26 -115
  2. package/dist/commands/commit/prodBuild.js +2 -3
  3. package/dist/commands/common/routineUtils.js +276 -0
  4. package/dist/commands/config.js +1 -1
  5. package/dist/commands/deploy/helper.js +40 -61
  6. package/dist/commands/deploy/index.js +90 -188
  7. package/dist/commands/deployments/delete.js +32 -22
  8. package/dist/commands/deployments/index.js +2 -2
  9. package/dist/commands/deployments/list.js +22 -38
  10. package/dist/commands/dev/build.js +3 -3
  11. package/dist/commands/dev/doProcess.js +5 -5
  12. package/dist/commands/dev/ew2/cacheService.js +33 -0
  13. package/dist/commands/dev/ew2/devEntry.js +2 -1
  14. package/dist/commands/dev/ew2/devPack.js +22 -11
  15. package/dist/commands/dev/ew2/kvService.js +27 -0
  16. package/dist/commands/dev/ew2/mock/cache.js +99 -15
  17. package/dist/commands/dev/ew2/mock/kv.js +142 -21
  18. package/dist/commands/dev/ew2/server.js +162 -27
  19. package/dist/commands/dev/index.js +14 -15
  20. package/dist/commands/dev/mockWorker/devPack.js +16 -7
  21. package/dist/commands/dev/mockWorker/server.js +7 -6
  22. package/dist/commands/domain/add.js +2 -2
  23. package/dist/commands/domain/delete.js +7 -7
  24. package/dist/commands/domain/index.js +2 -2
  25. package/dist/commands/domain/list.js +10 -10
  26. package/dist/commands/init/helper.js +87 -13
  27. package/dist/commands/init/index.js +461 -57
  28. package/dist/commands/init/template.jsonc +34 -0
  29. package/dist/commands/lang.js +2 -2
  30. package/dist/commands/login/index.js +57 -7
  31. package/dist/commands/logout.js +5 -5
  32. package/dist/commands/route/add.js +138 -49
  33. package/dist/commands/route/delete.js +33 -27
  34. package/dist/commands/route/helper.js +124 -0
  35. package/dist/commands/route/index.js +2 -2
  36. package/dist/commands/route/list.js +56 -17
  37. package/dist/commands/routine/delete.js +2 -2
  38. package/dist/commands/routine/index.js +2 -2
  39. package/dist/commands/routine/list.js +9 -21
  40. package/dist/commands/site/index.js +1 -1
  41. package/dist/commands/site/list.js +6 -7
  42. package/dist/commands/utils.js +55 -19
  43. package/dist/components/descriptionInput.js +1 -1
  44. package/dist/components/mutiSelectTable.js +1 -1
  45. package/dist/components/selectInput.js +2 -3
  46. package/dist/components/selectItem.js +1 -1
  47. package/dist/docs/Commands_en.md +25 -15
  48. package/dist/docs/Commands_zh_CN.md +12 -2
  49. package/dist/docs/eslint-config-en.md +1 -0
  50. package/dist/docs/eslint-config.md +73 -0
  51. package/dist/docs/init-command-quick-test.md +208 -0
  52. package/dist/docs/init-command-test-guide.md +598 -0
  53. package/dist/i18n/index.js +2 -2
  54. package/dist/i18n/locales.json +261 -17
  55. package/dist/index.js +17 -12
  56. package/dist/libs/api.js +32 -9
  57. package/dist/libs/apiService.js +258 -85
  58. package/dist/libs/git/index.js +8 -4
  59. package/dist/libs/interface.js +0 -1
  60. package/dist/libs/logger.js +63 -7
  61. package/dist/libs/service.js +2 -2
  62. package/dist/libs/templates/index.js +1 -1
  63. package/dist/utils/checkAssetsExist.js +80 -0
  64. package/dist/utils/checkDevPort.js +3 -17
  65. package/dist/utils/checkEntryFileExist.js +10 -0
  66. package/dist/utils/checkIsRoutineCreated.js +16 -31
  67. package/dist/utils/checkVersion.js +1 -1
  68. package/dist/utils/compress.js +80 -0
  69. package/dist/utils/download.js +5 -5
  70. package/dist/utils/fileMd5.js +1 -1
  71. package/dist/utils/fileUtils/index.js +71 -22
  72. package/dist/utils/installDeno.js +3 -3
  73. package/dist/utils/installEw2.js +7 -7
  74. package/dist/utils/openInBrowser.js +1 -1
  75. package/package.json +11 -6
@@ -0,0 +1,598 @@
1
+ # ESA CLI Init 命令自测文档
2
+
3
+ ## 概述
4
+
5
+ 本文档提供了 ESA CLI `init` 命令的完整自测指南,包括功能测试、边界条件测试和错误处理测试。
6
+
7
+ ## 命令功能
8
+
9
+ `init` 命令用于初始化一个新的 EdgeRoutine 项目,主要功能包括:
10
+
11
+ - 选择项目模板
12
+ - 创建项目目录结构
13
+ - 安装依赖包
14
+ - 构建项目(如果存在构建脚本)
15
+ - 初始化 Git 仓库(可选)
16
+ - 自动部署到生产环境(可选)
17
+
18
+ ## 测试环境准备
19
+
20
+ ### 1. 环境要求
21
+
22
+ ```bash
23
+ # 确保已安装 Node.js 和 npm
24
+ node --version
25
+ npm --version
26
+
27
+ # 安装项目依赖
28
+ npm install
29
+
30
+ # 构建项目
31
+ npm run build
32
+ ```
33
+
34
+ ### 2. 测试数据准备
35
+
36
+ ```bash
37
+ # 创建测试目录
38
+ mkdir -p test-init-commands
39
+ cd test-init-commands
40
+ ```
41
+
42
+ ## 测试用例
43
+
44
+ ### 1. 基础功能测试
45
+
46
+ #### 1.1 交互式初始化(完整流程)
47
+
48
+ **测试目标**: 验证完整的交互式初始化流程
49
+
50
+ **测试步骤**:
51
+
52
+ ```bash
53
+ # 运行交互式初始化
54
+ esa init
55
+
56
+ # 预期交互流程:
57
+ # 1. 输入项目名称(如:test-project)
58
+ # 2. 选择模板
59
+ # 3. 选择是否初始化 Git(Yes/No)
60
+ # 4. 选择是否部署(Yes/No)
61
+ ```
62
+
63
+ **验证点**:
64
+
65
+ - [ ] 项目目录创建成功
66
+ - [ ] 模板文件正确复制
67
+ - [ ] esa.toml 配置文件生成
68
+ - [ ] 依赖包安装成功
69
+ - [ ] 构建脚本执行(如果存在)
70
+ - [ ] Git 初始化(如果选择)
71
+ - [ ] 部署成功(如果选择)
72
+
73
+ #### 1.2 指定项目名称初始化
74
+
75
+ **测试目标**: 验证通过命令行参数指定项目名称
76
+
77
+ **测试步骤**:
78
+
79
+ ```bash
80
+ esa init my-test-project
81
+ ```
82
+
83
+ **验证点**:
84
+
85
+ - [ ] 项目名称验证通过(小写字母、数字、连字符)
86
+ - [ ] 项目目录以指定名称创建
87
+ - [ ] 跳过项目名称输入提示
88
+
89
+ #### 1.3 指定模板初始化
90
+
91
+ **测试目标**: 验证通过命令行参数指定模板
92
+
93
+ **测试步骤**:
94
+
95
+ ```bash
96
+ # 查看可用模板
97
+ esa init --help
98
+
99
+ # 使用指定模板初始化
100
+ esa init my-project --template <template-name>
101
+ ```
102
+
103
+ **验证点**:
104
+
105
+ - [ ] 模板存在性验证
106
+ - [ ] 跳过模板选择交互
107
+ - [ ] 使用指定模板创建项目
108
+
109
+ ### 2. 命令行选项测试
110
+
111
+ #### 2.1 --yes 选项(自动确认)
112
+
113
+ **测试目标**: 验证 --yes 选项的自动确认功能
114
+
115
+ **测试步骤**:
116
+
117
+ ```bash
118
+ esa init --yes
119
+ ```
120
+
121
+ **验证点**:
122
+
123
+ - [ ] 自动生成项目名称(edge-routine-<timestamp>)
124
+ - [ ] 自动选择第一个可用模板
125
+ - [ ] 自动初始化 Git
126
+ - [ ] 自动部署(如果已登录)
127
+
128
+ #### 2.2 --skip 选项(跳过交互)
129
+
130
+ **测试目标**: 验证 --skip 选项跳过交互功能
131
+
132
+ **测试步骤**:
133
+
134
+ ```bash
135
+ esa init --skip
136
+ ```
137
+
138
+ **验证点**:
139
+
140
+ - [ ] 跳过 Git 初始化交互
141
+ - [ ] 跳过部署交互
142
+ - [ ] 仅创建项目文件结构
143
+
144
+ #### 2.3 --config 选项
145
+
146
+ **测试目标**: 验证 --config 选项生成配置文件
147
+
148
+ **测试步骤**:
149
+
150
+ ```bash
151
+ esa init --config
152
+ ```
153
+
154
+ **验证点**:
155
+
156
+ - [ ] CLI 配置文件生成
157
+ - [ ] 配置文件格式正确
158
+
159
+ ### 3. 错误处理测试
160
+
161
+ #### 3.1 项目名称验证
162
+
163
+ **测试目标**: 验证项目名称格式验证
164
+
165
+ **测试步骤**:
166
+
167
+ ```bash
168
+ # 测试无效项目名称
169
+ esa init A # 大写字母
170
+ esa init 1 # 单个字符
171
+ esa init test_project # 下划线
172
+ esa init test project # 空格
173
+ ```
174
+
175
+ **验证点**:
176
+
177
+ - [ ] 显示错误信息:项目名称必须至少2个字符,只能包含小写字母、数字和连字符
178
+ - [ ] 命令执行失败
179
+
180
+ #### 3.2 项目目录已存在
181
+
182
+ **测试目标**: 验证项目目录冲突处理
183
+
184
+ **测试步骤**:
185
+
186
+ ```bash
187
+ # 创建同名目录
188
+ mkdir test-project
189
+ esa init test-project
190
+ ```
191
+
192
+ **验证点**:
193
+
194
+ - [ ] 显示错误信息:项目已存在
195
+ - [ ] 提供解决建议(重命名、删除、换目录)
196
+ - [ ] 命令执行失败
197
+
198
+ #### 3.3 模板不存在
199
+
200
+ **测试目标**: 验证指定模板不存在时的处理
201
+
202
+ **测试步骤**:
203
+
204
+ ```bash
205
+ esa init my-project --template non-existent-template
206
+ ```
207
+
208
+ **验证点**:
209
+
210
+ - [ ] 显示错误信息:模板未找到
211
+ - [ ] 提示检查模板名称
212
+ - [ ] 命令执行失败
213
+
214
+ #### 3.4 无可用模板
215
+
216
+ **测试目标**: 验证无可用模板时的处理
217
+
218
+ **测试步骤**:
219
+
220
+ ```bash
221
+ # 模拟无模板环境(需要修改模板配置)
222
+ esa init --yes
223
+ ```
224
+
225
+ **验证点**:
226
+
227
+ - [ ] 显示错误信息:没有可用的模板
228
+ - [ ] 命令执行失败
229
+
230
+ ### 4. 模板更新测试
231
+
232
+ #### 4.1 模板版本检查
233
+
234
+ **测试目标**: 验证模板版本检查和更新功能
235
+
236
+ **测试步骤**:
237
+
238
+ ```bash
239
+ # 模拟模板版本检查
240
+ esa init
241
+ ```
242
+
243
+ **验证点**:
244
+
245
+ - [ ] 检查当前模板版本
246
+ - [ ] 检查最新模板版本
247
+ - [ ] 提示是否更新(如果版本不同)
248
+
249
+ #### 4.2 模板自动更新
250
+
251
+ **测试目标**: 验证模板自动更新功能
252
+
253
+ **测试步骤**:
254
+
255
+ ```bash
256
+ # 在版本检查提示时选择更新
257
+ esa init
258
+ # 选择 "Yes" 更新模板
259
+ ```
260
+
261
+ **验证点**:
262
+
263
+ - [ ] 删除旧版本模板
264
+ - [ ] 下载最新版本模板
265
+ - [ ] 更新成功提示
266
+
267
+ ### 5. 依赖管理测试
268
+
269
+ #### 5.1 依赖安装
270
+
271
+ **测试目标**: 验证项目依赖自动安装
272
+
273
+ **测试步骤**:
274
+
275
+ ```bash
276
+ esa init test-project
277
+ ```
278
+
279
+ **验证点**:
280
+
281
+ - [ ] 检测 package.json 文件
282
+ - [ ] 执行 npm install
283
+ - [ ] 安装成功提示
284
+
285
+ #### 5.2 构建脚本执行
286
+
287
+ **测试目标**: 验证构建脚本自动执行
288
+
289
+ **测试步骤**:
290
+
291
+ ```bash
292
+ # 使用包含构建脚本的模板
293
+ esa init test-project --template <template-with-build>
294
+ ```
295
+
296
+ **验证点**:
297
+
298
+ - [ ] 检测构建脚本
299
+ - [ ] 执行 npm run build
300
+ - [ ] 构建成功提示
301
+
302
+ #### 5.3 无构建脚本处理
303
+
304
+ **测试目标**: 验证无构建脚本时的处理
305
+
306
+ **测试步骤**:
307
+
308
+ ```bash
309
+ # 使用不包含构建脚本的模板
310
+ esa init test-project --template <template-without-build>
311
+ ```
312
+
313
+ **验证点**:
314
+
315
+ - [ ] 检测无构建脚本
316
+ - [ ] 跳过构建步骤提示
317
+
318
+ ### 6. Git 集成测试
319
+
320
+ #### 6.1 Git 初始化
321
+
322
+ **测试目标**: 验证 Git 仓库初始化
323
+
324
+ **测试步骤**:
325
+
326
+ ```bash
327
+ esa init test-project
328
+ # 选择 "Yes" 初始化 Git
329
+ ```
330
+
331
+ **验证点**:
332
+
333
+ - [ ] 创建 .git 目录
334
+ - [ ] 初始化 Git 仓库
335
+ - [ ] 成功提示
336
+
337
+ #### 6.2 跳过 Git 初始化
338
+
339
+ **测试目标**: 验证跳过 Git 初始化
340
+
341
+ **测试步骤**:
342
+
343
+ ```bash
344
+ esa init test-project
345
+ # 选择 "No" 跳过 Git
346
+ ```
347
+
348
+ **验证点**:
349
+
350
+ - [ ] 不创建 .git 目录
351
+ - [ ] 显示跳过提示
352
+
353
+ ### 7. 部署功能测试
354
+
355
+ #### 7.1 自动部署(已登录)
356
+
357
+ **测试目标**: 验证已登录状态下的自动部署
358
+
359
+ **前置条件**: 已登录 ESA 服务
360
+
361
+ **测试步骤**:
362
+
363
+ ```bash
364
+ esa init test-project
365
+ # 选择 "Yes" 部署
366
+ ```
367
+
368
+ **验证点**:
369
+
370
+ - [ ] 检查登录状态
371
+ - [ ] 创建或更新函数
372
+ - [ ] 快速部署成功
373
+ - [ ] 显示访问 URL
374
+ - [ ] 显示域名生效提示
375
+
376
+ #### 7.2 自动部署(未登录)
377
+
378
+ **测试目标**: 验证未登录状态下的部署处理
379
+
380
+ **前置条件**: 未登录 ESA 服务
381
+
382
+ **测试步骤**:
383
+
384
+ ```bash
385
+ esa init test-project
386
+ # 选择 "Yes" 部署
387
+ ```
388
+
389
+ **验证点**:
390
+
391
+ - [ ] 检查登录状态
392
+ - [ ] 显示未登录警告
393
+ - [ ] 提示稍后手动部署
394
+
395
+ #### 7.3 跳过部署
396
+
397
+ **测试目标**: 验证跳过部署选项
398
+
399
+ **测试步骤**:
400
+
401
+ ```bash
402
+ esa init test-project
403
+ # 选择 "No" 跳过部署
404
+ ```
405
+
406
+ **验证点**:
407
+
408
+ - [ ] 不执行部署流程
409
+ - [ ] 显示后续部署指导
410
+
411
+ ### 8. 多语言支持测试
412
+
413
+ #### 8.1 中文界面
414
+
415
+ **测试目标**: 验证中文界面显示
416
+
417
+ **测试步骤**:
418
+
419
+ ```bash
420
+ # 设置中文语言
421
+ esa lang zh_CN
422
+ esa init test-project
423
+ ```
424
+
425
+ **验证点**:
426
+
427
+ - [ ] 所有提示信息显示中文
428
+ - [ ] 模板名称显示中文
429
+ - [ ] 错误信息显示中文
430
+
431
+ #### 8.2 英文界面
432
+
433
+ **测试目标**: 验证英文界面显示
434
+
435
+ **测试步骤**:
436
+
437
+ ```bash
438
+ # 设置英文语言
439
+ esa lang en
440
+ esa init test-project
441
+ ```
442
+
443
+ **验证点**:
444
+
445
+ - [ ] 所有提示信息显示英文
446
+ - [ ] 模板名称显示英文
447
+ - [ ] 错误信息显示英文
448
+
449
+ ## 性能测试
450
+
451
+ ### 1. 大模板处理
452
+
453
+ **测试目标**: 验证大模板的处理性能
454
+
455
+ **测试步骤**:
456
+
457
+ ```bash
458
+ # 使用包含大量文件的大模板
459
+ esa init test-project --template <large-template>
460
+ ```
461
+
462
+ **验证点**:
463
+
464
+ - [ ] 文件复制速度合理
465
+ - [ ] 内存使用正常
466
+ - [ ] 不出现超时错误
467
+
468
+ ### 2. 网络依赖安装
469
+
470
+ **测试目标**: 验证网络依赖安装性能
471
+
472
+ **测试步骤**:
473
+
474
+ ```bash
475
+ # 使用包含大量依赖的模板
476
+ esa init test-project --template <template-with-many-deps>
477
+ ```
478
+
479
+ **验证点**:
480
+
481
+ - [ ] 依赖安装速度合理
482
+ - [ ] 网络超时处理
483
+ - [ ] 安装失败重试机制
484
+
485
+ ## 清理测试
486
+
487
+ ### 1. 测试数据清理
488
+
489
+ **测试步骤**:
490
+
491
+ ```bash
492
+ # 清理测试项目
493
+ rm -rf test-*
494
+ rm -rf my-test-project
495
+ rm -rf my-project
496
+ ```
497
+
498
+ ### 2. 环境恢复
499
+
500
+ **测试步骤**:
501
+
502
+ ```bash
503
+ # 恢复语言设置(如果需要)
504
+ esa lang en
505
+
506
+ # 清理临时文件
507
+ rm -rf .esa-temp-*
508
+ ```
509
+
510
+ ## 测试报告模板
511
+
512
+ ### 测试执行记录
513
+
514
+ | 测试用例 | 执行时间 | 结果 | 备注 |
515
+ | -------------- | ---------------- | --------- | ---- |
516
+ | 基础功能测试 | YYYY-MM-DD HH:MM | PASS/FAIL | |
517
+ | 命令行选项测试 | YYYY-MM-DD HH:MM | PASS/FAIL | |
518
+ | 错误处理测试 | YYYY-MM-DD HH:MM | PASS/FAIL | |
519
+ | 模板更新测试 | YYYY-MM-DD HH:MM | PASS/FAIL | |
520
+ | 依赖管理测试 | YYYY-MM-DD HH:MM | PASS/FAIL | |
521
+ | Git 集成测试 | YYYY-MM-DD HH:MM | PASS/FAIL | |
522
+ | 部署功能测试 | YYYY-MM-DD HH:MM | PASS/FAIL | |
523
+ | 多语言支持测试 | YYYY-MM-DD HH:MM | PASS/FAIL | |
524
+ | 性能测试 | YYYY-MM-DD HH:MM | PASS/FAIL | |
525
+
526
+ ### 问题记录
527
+
528
+ | 问题描述 | 严重程度 | 复现步骤 | 状态 |
529
+ | -------- | -------- | -------- | ---- |
530
+ | | | | |
531
+
532
+ ## 自动化测试脚本
533
+
534
+ ### 基础测试脚本
535
+
536
+ ```bash
537
+ #!/bin/bash
538
+ # init-command-test.sh
539
+
540
+ set -e
541
+
542
+ echo "开始 ESA CLI Init 命令测试..."
543
+
544
+ # 清理环境
545
+ cleanup() {
546
+ echo "清理测试环境..."
547
+ rm -rf test-*
548
+ rm -rf my-test-project
549
+ rm -rf my-project
550
+ }
551
+
552
+ trap cleanup EXIT
553
+
554
+ # 测试用例
555
+ echo "1. 测试项目名称验证..."
556
+ esa init A 2>&1 | grep -q "项目名称必须至少2个字符" || exit 1
557
+
558
+ echo "2. 测试指定项目名称..."
559
+ esa init test-project --skip
560
+ [ -d "test-project" ] || exit 1
561
+
562
+ echo "3. 测试 --yes 选项..."
563
+ esa init --yes --skip
564
+ [ -d "edge-routine-"* ] || exit 1
565
+
566
+ echo "4. 测试 --template 选项..."
567
+ esa init template-test --template <valid-template> --skip
568
+ [ -d "template-test" ] || exit 1
569
+
570
+ echo "所有测试通过!"
571
+ ```
572
+
573
+ ### 运行自动化测试
574
+
575
+ ```bash
576
+ # 给脚本执行权限
577
+ chmod +x init-command-test.sh
578
+
579
+ # 运行测试
580
+ ./init-command-test.sh
581
+ ```
582
+
583
+ ## 注意事项
584
+
585
+ 1. **环境隔离**: 测试时确保在独立的测试目录中进行,避免影响现有项目
586
+ 2. **网络依赖**: 部分测试需要网络连接,确保网络环境正常
587
+ 3. **权限要求**: 某些操作可能需要管理员权限,确保有足够权限
588
+ 4. **数据备份**: 测试前备份重要数据,避免意外丢失
589
+ 5. **版本兼容**: 确保测试的 CLI 版本与文档版本一致
590
+
591
+ ## 联系支持
592
+
593
+ 如果在测试过程中遇到问题,请:
594
+
595
+ 1. 记录详细的错误信息和复现步骤
596
+ 2. 检查环境配置和依赖版本
597
+ 3. 查看项目 Issues 或提交新的 Issue
598
+ 4. 联系开发团队获取支持
@@ -1,8 +1,8 @@
1
1
  import { resolve } from 'path';
2
- import { getCliConfig } from '../utils/fileUtils/index.js';
3
2
  import logger from '../libs/logger.js';
4
- import { readJson } from '../utils/readJson.js';
5
3
  import { getDirName } from '../utils/fileUtils/base.js';
4
+ import { getCliConfig } from '../utils/fileUtils/index.js';
5
+ import { readJson } from '../utils/readJson.js';
6
6
  const localesJson = readJson(resolve(getDirName(import.meta.url), './locales.json'));
7
7
  const t = (key, variables) => {
8
8
  var _a;