koatty 4.0.0 → 4.0.3

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/TASKS.md ADDED
@@ -0,0 +1,1227 @@
1
+ # Koatty Monorepo 迁移任务清单
2
+
3
+ > **目标**: 将 Koatty 框架迁移到 Monorepo 架构,并配置自动同步
4
+ > **执行方式**: 由工程 LLM 逐个执行,每个任务独立且可测试
5
+ > **预计时间**: 5-7 天
6
+ > **状态**: 📋 待开始
7
+
8
+ ---
9
+
10
+ ## 📊 任务概览
11
+
12
+ | 阶段 | 任务数 | 预计时间 | 状态 |
13
+ |-----|-------|---------|------|
14
+ | **阶段 0**: 环境准备 | 3 | 0.5天 | ⏳ |
15
+ | **阶段 1**: 创建 Monorepo | 5 | 1天 | ⏳ |
16
+ | **阶段 2**: 迁移核心包 | 8 | 2天 | ⏳ |
17
+ | **阶段 3**: 配置构建系统 | 6 | 1天 | ⏳ |
18
+ | **阶段 4**: 配置自动同步 | 5 | 1天 | ⏳ |
19
+ | **阶段 5**: 测试与验证 | 6 | 1天 | ⏳ |
20
+ | **总计** | **33个任务** | **6.5天** | |
21
+
22
+ ---
23
+
24
+ ## 阶段 0: 环境准备
25
+
26
+ ### TASK-0.1: 验证 Node.js 版本
27
+
28
+ **目标**: 确保 Node.js 版本 >= 18.0.0
29
+
30
+ **前置条件**:
31
+ - 无
32
+
33
+ **执行步骤**:
34
+ 1. 运行 `node -v` 检查版本
35
+ 2. 如果版本 < 18.0.0,输出升级指南
36
+ 3. 创建验证报告
37
+
38
+ **验收标准**:
39
+ - [ ] Node.js 版本 >= 18.0.0
40
+ - [ ] 输出版本信息到 `reports/node-version.txt`
41
+
42
+ **测试命令**:
43
+ ```bash
44
+ node -v
45
+ cat reports/node-version.txt
46
+ ```
47
+
48
+ **回滚方案**:
49
+ - 无需回滚(只读操作)
50
+
51
+ ---
52
+
53
+ ### TASK-0.2: 安装 pnpm
54
+
55
+ **目标**: 安装并验证 pnpm >= 8.0.0
56
+
57
+ **前置条件**:
58
+ - TASK-0.1 完成
59
+
60
+ **执行步骤**:
61
+ 1. 检查 pnpm 是否已安装
62
+ 2. 如果未安装,运行 `npm install -g pnpm@8`
63
+ 3. 验证版本 `pnpm -v`
64
+ 4. 记录到报告
65
+
66
+ **验收标准**:
67
+ - [ ] pnpm 已安装
68
+ - [ ] pnpm 版本 >= 8.0.0
69
+ - [ ] 输出版本信息到 `reports/pnpm-version.txt`
70
+
71
+ **测试命令**:
72
+ ```bash
73
+ pnpm -v
74
+ cat reports/pnpm-version.txt
75
+ ```
76
+
77
+ **回滚方案**:
78
+ - 无需回滚(全局安装)
79
+
80
+ ---
81
+
82
+ ### TASK-0.3: 创建备份分支
83
+
84
+ **目标**: 为当前仓库创建备份分支
85
+
86
+ **前置条件**:
87
+ - TASK-0.2 完成
88
+ - 当前在 koatty 仓库根目录
89
+
90
+ **执行步骤**:
91
+ 1. 确保工作区干净: `git status`
92
+ 2. 创建备份分支: `git branch backup-before-monorepo-$(date +%Y%m%d)`
93
+ 3. 推送到远程: `git push origin backup-before-monorepo-$(date +%Y%m%d)`
94
+ 4. 记录分支名
95
+
96
+ **验收标准**:
97
+ - [ ] 创建了备份分支
98
+ - [ ] 备份分支已推送到远程
99
+ - [ ] 分支名记录在 `reports/backup-branch.txt`
100
+
101
+ **测试命令**:
102
+ ```bash
103
+ git branch --list 'backup-before-monorepo-*'
104
+ cat reports/backup-branch.txt
105
+ ```
106
+
107
+ **回滚方案**:
108
+ ```bash
109
+ # 恢复到备份分支
110
+ git checkout $(cat reports/backup-branch.txt)
111
+ ```
112
+
113
+ ---
114
+
115
+ ## 阶段 1: 创建 Monorepo 基础结构
116
+
117
+ ### TASK-1.1: 创建 Monorepo 目录
118
+
119
+ **目标**: 在上层目录创建 koatty-monorepo
120
+
121
+ **前置条件**:
122
+ - TASK-0.3 完成
123
+
124
+ **执行步骤**:
125
+ 1. 进入上层目录: `cd ..`
126
+ 2. 创建 monorepo 目录: `mkdir -p koatty-monorepo`
127
+ 3. 进入目录: `cd koatty-monorepo`
128
+ 4. 初始化 git: `git init`
129
+ 5. 创建 .gitignore
130
+
131
+ **验收标准**:
132
+ - [ ] koatty-monorepo 目录已创建
133
+ - [ ] Git 仓库已初始化
134
+ - [ ] .gitignore 文件已创建
135
+
136
+ **测试命令**:
137
+ ```bash
138
+ cd koatty-monorepo
139
+ git status
140
+ ls -la .gitignore
141
+ ```
142
+
143
+ **回滚方案**:
144
+ ```bash
145
+ cd ..
146
+ rm -rf koatty-monorepo
147
+ ```
148
+
149
+ **输出文件**:
150
+ - `koatty-monorepo/.gitignore`
151
+
152
+ ---
153
+
154
+ ### TASK-1.2: 创建基础目录结构
155
+
156
+ **目标**: 创建 packages、apps、tools 目录
157
+
158
+ **前置条件**:
159
+ - TASK-1.1 完成
160
+ - 当前在 koatty-monorepo 目录
161
+
162
+ **执行步骤**:
163
+ 1. 创建目录: `mkdir -p packages apps tools scripts .github/workflows`
164
+ 2. 创建 reports 目录: `mkdir reports`
165
+ 3. 列出目录结构
166
+
167
+ **验收标准**:
168
+ - [ ] packages/ 目录存在
169
+ - [ ] apps/ 目录存在
170
+ - [ ] tools/ 目录存在
171
+ - [ ] scripts/ 目录存在
172
+ - [ ] .github/workflows/ 目录存在
173
+ - [ ] 目录结构输出到 `reports/directory-structure.txt`
174
+
175
+ **测试命令**:
176
+ ```bash
177
+ ls -la packages apps tools scripts .github/workflows
178
+ tree -L 2 > reports/directory-structure.txt 2>/dev/null || find . -maxdepth 2 -type d > reports/directory-structure.txt
179
+ ```
180
+
181
+ **回滚方案**:
182
+ ```bash
183
+ rm -rf packages apps tools scripts .github
184
+ ```
185
+
186
+ ---
187
+
188
+ ### TASK-1.3: 初始化 package.json
189
+
190
+ **目标**: 创建根 package.json
191
+
192
+ **前置条件**:
193
+ - TASK-1.2 完成
194
+
195
+ **执行步骤**:
196
+ 1. 运行 `pnpm init`
197
+ 2. 更新 package.json 内容
198
+ 3. 添加必要的脚本
199
+
200
+ **验收标准**:
201
+ - [ ] package.json 存在
202
+ - [ ] name 为 "koatty-monorepo"
203
+ - [ ] private 为 true
204
+ - [ ] packageManager 字段指定 pnpm@8
205
+ - [ ] 包含基础 scripts
206
+
207
+ **测试命令**:
208
+ ```bash
209
+ cat package.json | jq '.name, .private, .packageManager'
210
+ ```
211
+
212
+ **回滚方案**:
213
+ ```bash
214
+ rm package.json
215
+ ```
216
+
217
+ **输出文件**:
218
+ - `package.json`
219
+
220
+ ---
221
+
222
+ ### TASK-1.4: 创建 pnpm-workspace.yaml
223
+
224
+ **目标**: 配置 pnpm workspace
225
+
226
+ **前置条件**:
227
+ - TASK-1.3 完成
228
+
229
+ **执行步骤**:
230
+ 1. 创建 pnpm-workspace.yaml
231
+ 2. 配置 packages、apps、tools 为 workspace
232
+
233
+ **验收标准**:
234
+ - [ ] pnpm-workspace.yaml 存在
235
+ - [ ] 包含 'packages/*'
236
+ - [ ] 包含 'apps/*'
237
+ - [ ] 包含 'tools/*'
238
+
239
+ **测试命令**:
240
+ ```bash
241
+ cat pnpm-workspace.yaml
242
+ ```
243
+
244
+ **回滚方案**:
245
+ ```bash
246
+ rm pnpm-workspace.yaml
247
+ ```
248
+
249
+ **输出文件**:
250
+ ```yaml
251
+ # pnpm-workspace.yaml
252
+ packages:
253
+ - 'packages/*'
254
+ - 'apps/*'
255
+ - 'tools/*'
256
+ ```
257
+
258
+ ---
259
+
260
+ ### TASK-1.5: 创建 turbo.json
261
+
262
+ **目标**: 配置 Turborepo
263
+
264
+ **前置条件**:
265
+ - TASK-1.4 完成
266
+
267
+ **执行步骤**:
268
+ 1. 安装 turbo: `pnpm add -D turbo`
269
+ 2. 创建 turbo.json
270
+ 3. 配置 pipeline
271
+
272
+ **验收标准**:
273
+ - [ ] turbo 已安装
274
+ - [ ] turbo.json 存在
275
+ - [ ] 配置了 build、dev、test、lint pipeline
276
+ - [ ] 启用了缓存
277
+
278
+ **测试命令**:
279
+ ```bash
280
+ cat turbo.json
281
+ pnpm list turbo
282
+ ```
283
+
284
+ **回滚方案**:
285
+ ```bash
286
+ rm turbo.json
287
+ pnpm remove turbo
288
+ ```
289
+
290
+ **输出文件**:
291
+ ```json
292
+ {
293
+ "$schema": "https://turbo.build/schema.json",
294
+ "globalDependencies": [
295
+ "tsconfig.base.json",
296
+ ".eslintrc.js"
297
+ ],
298
+ "pipeline": {
299
+ "build": {
300
+ "dependsOn": ["^build"],
301
+ "outputs": ["dist/**", "*.tsbuildinfo"],
302
+ "cache": true
303
+ },
304
+ "dev": {
305
+ "cache": false,
306
+ "persistent": true
307
+ },
308
+ "test": {
309
+ "dependsOn": ["build"],
310
+ "outputs": ["coverage/**"],
311
+ "cache": true
312
+ },
313
+ "lint": {
314
+ "outputs": [],
315
+ "cache": true
316
+ },
317
+ "clean": {
318
+ "cache": false
319
+ }
320
+ }
321
+ }
322
+ ```
323
+
324
+ ---
325
+
326
+ ## 阶段 2: 迁移核心包
327
+
328
+ ### TASK-2.1: 配置 Git Remotes
329
+
330
+ **目标**: 为每个核心包添加独立仓库的 remote
331
+
332
+ **前置条件**:
333
+ - TASK-1.5 完成
334
+ - 当前在 koatty-monorepo 目录
335
+
336
+ **执行步骤**:
337
+ 1. 添加 remote for koatty_core
338
+ 2. 添加 remote for koatty_router
339
+ 3. 添加 remote for koatty_serve
340
+ 4. 添加 remote for koatty_exception
341
+ 5. 添加 remote for koatty_trace
342
+ 6. 添加 remote for koatty_config
343
+ 7. 添加 remote for koatty
344
+ 8. 列出所有 remotes
345
+
346
+ **验收标准**:
347
+ - [ ] 7个 remote 已添加
348
+ - [ ] remote 列表输出到 `reports/git-remotes.txt`
349
+
350
+ **测试命令**:
351
+ ```bash
352
+ git remote -v > reports/git-remotes.txt
353
+ cat reports/git-remotes.txt
354
+ ```
355
+
356
+ **回滚方案**:
357
+ ```bash
358
+ git remote remove koatty-core
359
+ git remote remove koatty-router
360
+ git remote remove koatty-serve
361
+ git remote remove koatty-exception
362
+ git remote remove koatty-trace
363
+ git remote remove koatty-config
364
+ git remote remove koatty-main
365
+ ```
366
+
367
+ ---
368
+
369
+ ### TASK-2.2: 克隆 koatty_config
370
+
371
+ **目标**: 将 koatty_config 克隆到 packages/
372
+
373
+ **前置条件**:
374
+ - TASK-2.1 完成
375
+
376
+ **执行步骤**:
377
+ 1. 克隆仓库到临时目录
378
+ 2. 移动到 packages/koatty-config
379
+ 3. 删除 .git 目录(保留代码)
380
+ 4. 验证文件完整性
381
+
382
+ **验收标准**:
383
+ - [ ] packages/koatty-config/ 目录存在
384
+ - [ ] package.json 存在且 name 为 "koatty_config"
385
+ - [ ] src/ 目录存在
386
+ - [ ] 无 .git 目录
387
+
388
+ **测试命令**:
389
+ ```bash
390
+ ls packages/koatty-config/
391
+ cat packages/koatty-config/package.json | jq '.name, .version'
392
+ test ! -d packages/koatty-config/.git && echo "No .git directory"
393
+ ```
394
+
395
+ **回滚方案**:
396
+ ```bash
397
+ rm -rf packages/koatty-config
398
+ ```
399
+
400
+ ---
401
+
402
+ ### TASK-2.3: 克隆 koatty_exception
403
+
404
+ **目标**: 将 koatty_exception 克隆到 packages/
405
+
406
+ **前置条件**:
407
+ - TASK-2.2 完成
408
+
409
+ **执行步骤**:
410
+ 1. 克隆仓库到临时目录
411
+ 2. 移动到 packages/koatty-exception
412
+ 3. 删除 .git 目录
413
+ 4. 验证文件完整性
414
+
415
+ **验收标准**:
416
+ - [ ] packages/koatty-exception/ 目录存在
417
+ - [ ] package.json 存在且 name 为 "koatty_exception"
418
+ - [ ] src/ 目录存在
419
+
420
+ **测试命令**:
421
+ ```bash
422
+ cat packages/koatty-exception/package.json | jq '.name, .version'
423
+ ```
424
+
425
+ **回滚方案**:
426
+ ```bash
427
+ rm -rf packages/koatty-exception
428
+ ```
429
+
430
+ ---
431
+
432
+ ### TASK-2.4: 克隆 koatty_trace
433
+
434
+ **目标**: 将 koatty_trace 克隆到 packages/
435
+
436
+ **前置条件**:
437
+ - TASK-2.3 完成
438
+
439
+ **执行步骤**:
440
+ 1. 克隆仓库
441
+ 2. 移动到 packages/koatty-trace
442
+ 3. 删除 .git 目录
443
+ 4. 验证
444
+
445
+ **验收标准**:
446
+ - [ ] packages/koatty-trace/ 目录存在
447
+ - [ ] package.json 正确
448
+
449
+ **测试命令**:
450
+ ```bash
451
+ cat packages/koatty-trace/package.json | jq '.name'
452
+ ```
453
+
454
+ **回滚方案**:
455
+ ```bash
456
+ rm -rf packages/koatty-trace
457
+ ```
458
+
459
+ ---
460
+
461
+ ### TASK-2.5: 克隆 koatty_core
462
+
463
+ **目标**: 将 koatty_core 克隆到 packages/
464
+
465
+ **前置条件**:
466
+ - TASK-2.4 完成
467
+
468
+ **执行步骤**:
469
+ 1. 克隆 koatty_core
470
+ 2. 移动到 packages/koatty-core
471
+ 3. 删除 .git 目录
472
+ 4. 验证
473
+
474
+ **验收标准**:
475
+ - [ ] packages/koatty-core/ 目录存在
476
+ - [ ] package.json 正确
477
+
478
+ **测试命令**:
479
+ ```bash
480
+ cat packages/koatty-core/package.json | jq '.name'
481
+ ```
482
+
483
+ **回滚方案**:
484
+ ```bash
485
+ rm -rf packages/koatty-core
486
+ ```
487
+
488
+ ---
489
+
490
+ ### TASK-2.6: 克隆 koatty_router
491
+
492
+ **目标**: 将 koatty_router 克隆到 packages/
493
+
494
+ **前置条件**:
495
+ - TASK-2.5 完成
496
+
497
+ **执行步骤**:
498
+ 1. 克隆仓库
499
+ 2. 移动到 packages/koatty-router
500
+ 3. 删除 .git 目录
501
+ 4. 验证
502
+
503
+ **验收标准**:
504
+ - [ ] packages/koatty-router/ 目录存在
505
+ - [ ] package.json 正确
506
+
507
+ **测试命令**:
508
+ ```bash
509
+ cat packages/koatty-router/package.json | jq '.name'
510
+ ```
511
+
512
+ **回滚方案**:
513
+ ```bash
514
+ rm -rf packages/koatty-router
515
+ ```
516
+
517
+ ---
518
+
519
+ ### TASK-2.7: 克隆 koatty_serve
520
+
521
+ **目标**: 将 koatty_serve 克隆到 packages/
522
+
523
+ **前置条件**:
524
+ - TASK-2.6 完成
525
+
526
+ **执行步骤**:
527
+ 1. 克隆仓库
528
+ 2. 移动到 packages/koatty-serve
529
+ 3. 删除 .git 目录
530
+ 4. 验证
531
+
532
+ **验收标准**:
533
+ - [ ] packages/koatty-serve/ 目录存在
534
+ - [ ] package.json 正确
535
+
536
+ **测试命令**:
537
+ ```bash
538
+ cat packages/koatty-serve/package.json | jq '.name'
539
+ ```
540
+
541
+ **回滚方案**:
542
+ ```bash
543
+ rm -rf packages/koatty-serve
544
+ ```
545
+
546
+ ---
547
+
548
+ ### TASK-2.8: 克隆 koatty 主包
549
+
550
+ **目标**: 将 koatty 克隆到 packages/
551
+
552
+ **前置条件**:
553
+ - TASK-2.7 完成
554
+
555
+ **执行步骤**:
556
+ 1. 克隆 koatty
557
+ 2. 移动到 packages/koatty
558
+ 3. 删除 .git 目录
559
+ 4. 验证
560
+ 5. 生成迁移报告
561
+
562
+ **验收标准**:
563
+ - [ ] packages/koatty/ 目录存在
564
+ - [ ] 所有7个包都已迁移
565
+ - [ ] 迁移报告生成: `reports/migration-summary.txt`
566
+
567
+ **测试命令**:
568
+ ```bash
569
+ ls packages/
570
+ cat packages/koatty/package.json | jq '.name'
571
+ echo "Migrated packages:" > reports/migration-summary.txt
572
+ ls packages/ >> reports/migration-summary.txt
573
+ cat reports/migration-summary.txt
574
+ ```
575
+
576
+ **回滚方案**:
577
+ ```bash
578
+ rm -rf packages/koatty
579
+ ```
580
+
581
+ ---
582
+
583
+ ## 阶段 3: 配置构建系统
584
+
585
+ ### TASK-3.1: 更新 workspace 依赖 - koatty_config
586
+
587
+ **目标**: 将 koatty_config 的内部依赖改为 workspace:*
588
+
589
+ **前置条件**:
590
+ - TASK-2.8 完成
591
+
592
+ **执行步骤**:
593
+ 1. 读取 packages/koatty-config/package.json
594
+ 2. 检查 dependencies 中的 koatty 相关包
595
+ 3. 如果是 monorepo 包,改为 "workspace:*"
596
+ 4. 保存文件
597
+
598
+ **验收标准**:
599
+ - [ ] monorepo 包使用 "workspace:*"
600
+ - [ ] 独立包(koatty_container, koatty_lib, koatty_logger, koatty_loader)保持 npm 版本
601
+
602
+ **测试命令**:
603
+ ```bash
604
+ cat packages/koatty-config/package.json | jq '.dependencies'
605
+ ```
606
+
607
+ **回滚方案**:
608
+ ```bash
609
+ git checkout packages/koatty-config/package.json
610
+ ```
611
+
612
+ ---
613
+
614
+ ### TASK-3.2: 更新 workspace 依赖 - koatty_exception
615
+
616
+ **目标**: 更新 koatty_exception 的依赖
617
+
618
+ **前置条件**:
619
+ - TASK-3.1 完成
620
+
621
+ **执行步骤**:
622
+ 1. 更新 package.json 中的 monorepo 包依赖为 "workspace:*"
623
+ 2. 保留独立包的 npm 版本
624
+
625
+ **验收标准**:
626
+ - [ ] 依赖正确更新
627
+
628
+ **测试命令**:
629
+ ```bash
630
+ cat packages/koatty-exception/package.json | jq '.dependencies'
631
+ ```
632
+
633
+ **回滚方案**:
634
+ ```bash
635
+ git checkout packages/koatty-exception/package.json
636
+ ```
637
+
638
+ ---
639
+
640
+ ### TASK-3.3: 更新 workspace 依赖 - koatty_trace
641
+
642
+ **目标**: 更新 koatty_trace 的依赖
643
+
644
+ **前置条件**:
645
+ - TASK-3.2 完成
646
+
647
+ **执行步骤**:
648
+ 1. 更新依赖为 workspace:*
649
+
650
+ **验收标准**:
651
+ - [ ] 依赖正确更新
652
+
653
+ **测试命令**:
654
+ ```bash
655
+ cat packages/koatty-trace/package.json | jq '.dependencies'
656
+ ```
657
+
658
+ **回滚方案**:
659
+ ```bash
660
+ git checkout packages/koatty-trace/package.json
661
+ ```
662
+
663
+ ---
664
+
665
+ ### TASK-3.4: 更新 workspace 依赖 - koatty_core, koatty_router, koatty_serve
666
+
667
+ **目标**: 批量更新剩余包的依赖
668
+
669
+ **前置条件**:
670
+ - TASK-3.3 完成
671
+
672
+ **执行步骤**:
673
+ 1. 更新 koatty_core
674
+ 2. 更新 koatty_router
675
+ 3. 更新 koatty_serve
676
+ 4. 生成依赖关系报告
677
+
678
+ **验收标准**:
679
+ - [ ] 所有 monorepo 包使用 workspace:*
680
+ - [ ] 依赖关系报告: `reports/dependencies.txt`
681
+
682
+ **测试命令**:
683
+ ```bash
684
+ for pkg in koatty-core koatty-router koatty-serve; do
685
+ echo "=== $pkg ===" >> reports/dependencies.txt
686
+ cat packages/$pkg/package.json | jq '.dependencies' >> reports/dependencies.txt
687
+ done
688
+ cat reports/dependencies.txt
689
+ ```
690
+
691
+ **回滚方案**:
692
+ ```bash
693
+ git checkout packages/koatty-core/package.json
694
+ git checkout packages/koatty-router/package.json
695
+ git checkout packages/koatty-serve/package.json
696
+ ```
697
+
698
+ ---
699
+
700
+ ### TASK-3.5: 更新 koatty 主包依赖
701
+
702
+ **目标**: 更新 koatty 主包的所有依赖
703
+
704
+ **前置条件**:
705
+ - TASK-3.4 完成
706
+
707
+ **执行步骤**:
708
+ 1. 更新所有核心包依赖为 workspace:*
709
+ 2. 保留独立包版本
710
+ 3. 验证依赖完整性
711
+
712
+ **验收标准**:
713
+ - [ ] koatty 正确依赖所有核心包
714
+ - [ ] 使用 workspace 协议
715
+
716
+ **测试命令**:
717
+ ```bash
718
+ cat packages/koatty/package.json | jq '.dependencies'
719
+ ```
720
+
721
+ **回滚方案**:
722
+ ```bash
723
+ git checkout packages/koatty/package.json
724
+ ```
725
+
726
+ ---
727
+
728
+ ### TASK-3.6: 安装所有依赖并验证
729
+
730
+ **目标**: 安装 workspace 依赖并验证
731
+
732
+ **前置条件**:
733
+ - TASK-3.5 完成
734
+
735
+ **执行步骤**:
736
+ 1. 运行 `pnpm install`
737
+ 2. 检查是否有错误
738
+ 3. 验证 workspace 链接
739
+ 4. 生成依赖树
740
+
741
+ **验收标准**:
742
+ - [ ] pnpm install 成功
743
+ - [ ] 没有依赖错误
744
+ - [ ] workspace 包正确链接
745
+ - [ ] 依赖树输出到 `reports/dependency-tree.txt`
746
+
747
+ **测试命令**:
748
+ ```bash
749
+ pnpm install
750
+ pnpm list --depth=1 > reports/dependency-tree.txt
751
+ cat reports/dependency-tree.txt
752
+ ```
753
+
754
+ **回滚方案**:
755
+ ```bash
756
+ rm -rf node_modules pnpm-lock.yaml
757
+ ```
758
+
759
+ ---
760
+
761
+ ## 阶段 4: 配置自动同步
762
+
763
+ ### TASK-4.1: 创建同步脚本
764
+
765
+ **目标**: 创建 scripts/sync-to-repos.sh
766
+
767
+ **前置条件**:
768
+ - TASK-3.6 完成
769
+
770
+ **执行步骤**:
771
+ 1. 创建 scripts/sync-to-repos.sh
772
+ 2. 添加执行权限
773
+ 3. 测试脚本语法
774
+
775
+ **验收标准**:
776
+ - [ ] 脚本文件存在
777
+ - [ ] 有执行权限
778
+ - [ ] bash 语法正确
779
+
780
+ **测试命令**:
781
+ ```bash
782
+ ls -la scripts/sync-to-repos.sh
783
+ bash -n scripts/sync-to-repos.sh
784
+ ```
785
+
786
+ **回滚方案**:
787
+ ```bash
788
+ rm scripts/sync-to-repos.sh
789
+ ```
790
+
791
+ **输出文件**:
792
+ 参考 MONOREPO_SYNC_STRATEGY.md 中的同步脚本
793
+
794
+ ---
795
+
796
+ ### TASK-4.2: 创建同步状态检查脚本
797
+
798
+ **目标**: 创建 scripts/check-sync-status.sh
799
+
800
+ **前置条件**:
801
+ - TASK-4.1 完成
802
+
803
+ **执行步骤**:
804
+ 1. 创建检查脚本
805
+ 2. 添加执行权限
806
+
807
+ **验收标准**:
808
+ - [ ] 脚本存在且可执行
809
+ - [ ] 语法正确
810
+
811
+ **测试命令**:
812
+ ```bash
813
+ bash -n scripts/check-sync-status.sh
814
+ ```
815
+
816
+ **回滚方案**:
817
+ ```bash
818
+ rm scripts/check-sync-status.sh
819
+ ```
820
+
821
+ ---
822
+
823
+ ### TASK-4.3: 创建 GitHub Actions - 同步到独立仓库
824
+
825
+ **目标**: 创建自动同步 workflow
826
+
827
+ **前置条件**:
828
+ - TASK-4.2 完成
829
+
830
+ **执行步骤**:
831
+ 1. 创建 .github/workflows/sync-to-independent-repos.yml
832
+ 2. 配置矩阵构建
833
+ 3. 验证 YAML 语法
834
+
835
+ **验收标准**:
836
+ - [ ] workflow 文件存在
837
+ - [ ] YAML 语法正确
838
+ - [ ] 包含所有7个包的同步配置
839
+
840
+ **测试命令**:
841
+ ```bash
842
+ cat .github/workflows/sync-to-independent-repos.yml
843
+ # 验证 YAML
844
+ python3 -c "import yaml; yaml.safe_load(open('.github/workflows/sync-to-independent-repos.yml'))" 2>/dev/null || echo "YAML is valid"
845
+ ```
846
+
847
+ **回滚方案**:
848
+ ```bash
849
+ rm .github/workflows/sync-to-independent-repos.yml
850
+ ```
851
+
852
+ **输出文件**:
853
+ 参考 MONOREPO_SYNC_STRATEGY.md 中的 GitHub Actions 配置
854
+
855
+ ---
856
+
857
+ ### TASK-4.4: 创建 GitHub Actions - 反向同步
858
+
859
+ **目标**: 创建从独立仓库同步回 monorepo 的 workflow
860
+
861
+ **前置条件**:
862
+ - TASK-4.3 完成
863
+
864
+ **执行步骤**:
865
+ 1. 创建 .github/workflows/sync-from-independent-repos.yml
866
+ 2. 验证配置
867
+
868
+ **验收标准**:
869
+ - [ ] workflow 文件存在
870
+ - [ ] 配置正确
871
+
872
+ **测试命令**:
873
+ ```bash
874
+ ls -la .github/workflows/sync-from-independent-repos.yml
875
+ ```
876
+
877
+ **回滚方案**:
878
+ ```bash
879
+ rm .github/workflows/sync-from-independent-repos.yml
880
+ ```
881
+
882
+ ---
883
+
884
+ ### TASK-4.5: 配置 Changesets
885
+
886
+ **目标**: 安装并配置 Changesets 用于版本管理
887
+
888
+ **前置条件**:
889
+ - TASK-4.4 完成
890
+
891
+ **执行步骤**:
892
+ 1. 安装 @changesets/cli: `pnpm add -D @changesets/cli`
893
+ 2. 初始化: `pnpm changeset init`
894
+ 3. 配置 .changeset/config.json
895
+ 4. 更新根 package.json 添加 scripts
896
+
897
+ **验收标准**:
898
+ - [ ] @changesets/cli 已安装
899
+ - [ ] .changeset/ 目录存在
900
+ - [ ] config.json 已配置
901
+ - [ ] package.json 包含 changeset 相关 scripts
902
+
903
+ **测试命令**:
904
+ ```bash
905
+ ls -la .changeset/
906
+ cat .changeset/config.json
907
+ cat package.json | jq '.scripts | with_entries(select(.key | contains("changeset")))'
908
+ ```
909
+
910
+ **回滚方案**:
911
+ ```bash
912
+ rm -rf .changeset/
913
+ pnpm remove @changesets/cli
914
+ ```
915
+
916
+ ---
917
+
918
+ ## 阶段 5: 测试与验证
919
+
920
+ ### TASK-5.1: 构建所有包
921
+
922
+ **目标**: 验证所有包可以成功构建
923
+
924
+ **前置条件**:
925
+ - TASK-4.5 完成
926
+ - 所有依赖已安装
927
+
928
+ **执行步骤**:
929
+ 1. 运行 `pnpm build`
930
+ 2. 检查构建输出
931
+ 3. 验证 dist 目录
932
+ 4. 记录构建时间
933
+
934
+ **验收标准**:
935
+ - [ ] 构建成功无错误
936
+ - [ ] 所有包的 dist/ 目录存在
937
+ - [ ] 构建报告输出到 `reports/build-result.txt`
938
+
939
+ **测试命令**:
940
+ ```bash
941
+ pnpm build 2>&1 | tee reports/build-result.txt
942
+ for pkg in packages/*/; do
943
+ echo "Checking $pkg"
944
+ ls -la "$pkg/dist/" || echo "No dist in $pkg"
945
+ done
946
+ ```
947
+
948
+ **回滚方案**:
949
+ ```bash
950
+ pnpm clean
951
+ ```
952
+
953
+ ---
954
+
955
+ ### TASK-5.2: 运行所有测试
956
+
957
+ **目标**: 验证所有测试通过
958
+
959
+ **前置条件**:
960
+ - TASK-5.1 完成
961
+
962
+ **执行步骤**:
963
+ 1. 运行 `pnpm test`
964
+ 2. 收集测试结果
965
+ 3. 生成覆盖率报告(如果有)
966
+
967
+ **验收标准**:
968
+ - [ ] 所有测试通过
969
+ - [ ] 测试报告输出到 `reports/test-result.txt`
970
+
971
+ **测试命令**:
972
+ ```bash
973
+ pnpm test 2>&1 | tee reports/test-result.txt
974
+ tail -20 reports/test-result.txt
975
+ ```
976
+
977
+ **回滚方案**:
978
+ - 无需回滚(只读操作)
979
+
980
+ ---
981
+
982
+ ### TASK-5.3: 验证 Turborepo 缓存
983
+
984
+ **目标**: 验证增量构建和缓存功能
985
+
986
+ **前置条件**:
987
+ - TASK-5.2 完成
988
+
989
+ **执行步骤**:
990
+ 1. 清理构建: `pnpm clean`
991
+ 2. 首次构建: `pnpm build`
992
+ 3. 再次构建: `pnpm build`
993
+ 4. 对比构建时间
994
+ 5. 验证 FULL TURBO 输出
995
+
996
+ **验收标准**:
997
+ - [ ] 第二次构建显示缓存命中
998
+ - [ ] 看到 "FULL TURBO" 或 "cache hit"
999
+ - [ ] 缓存报告输出到 `reports/cache-validation.txt`
1000
+
1001
+ **测试命令**:
1002
+ ```bash
1003
+ pnpm clean
1004
+ echo "=== First build ===" > reports/cache-validation.txt
1005
+ time pnpm build 2>&1 | tee -a reports/cache-validation.txt
1006
+ echo "=== Second build (should use cache) ===" >> reports/cache-validation.txt
1007
+ time pnpm build 2>&1 | tee -a reports/cache-validation.txt
1008
+ cat reports/cache-validation.txt
1009
+ ```
1010
+
1011
+ **回滚方案**:
1012
+ ```bash
1013
+ rm -rf .turbo
1014
+ ```
1015
+
1016
+ ---
1017
+
1018
+ ### TASK-5.4: 验证 workspace 协议
1019
+
1020
+ **目标**: 确认 workspace:* 正确工作
1021
+
1022
+ **前置条件**:
1023
+ - TASK-5.3 完成
1024
+
1025
+ **执行步骤**:
1026
+ 1. 检查 node_modules 中的软链接
1027
+ 2. 修改一个包的代码
1028
+ 3. 验证其他包能立即使用
1029
+ 4. 生成 workspace 验证报告
1030
+
1031
+ **验收标准**:
1032
+ - [ ] workspace 包是软链接
1033
+ - [ ] 修改即时生效
1034
+ - [ ] 验证报告: `reports/workspace-validation.txt`
1035
+
1036
+ **测试命令**:
1037
+ ```bash
1038
+ echo "Checking workspace links..." > reports/workspace-validation.txt
1039
+ ls -la node_modules/.pnpm/node_modules/koatty_* >> reports/workspace-validation.txt 2>&1 || \
1040
+ ls -la node_modules/koatty_* >> reports/workspace-validation.txt 2>&1
1041
+ cat reports/workspace-validation.txt
1042
+ ```
1043
+
1044
+ **回滚方案**:
1045
+ - 无需回滚
1046
+
1047
+ ---
1048
+
1049
+ ### TASK-5.5: 创建测试应用
1050
+
1051
+ **目标**: 在 apps/demo 创建测试应用
1052
+
1053
+ **前置条件**:
1054
+ - TASK-5.4 完成
1055
+
1056
+ **执行步骤**:
1057
+ 1. 创建 apps/demo 目录
1058
+ 2. 创建 package.json
1059
+ 3. 引用 monorepo 包
1060
+ 4. 创建简单的测试代码
1061
+ 5. 验证可以运行
1062
+
1063
+ **验收标准**:
1064
+ - [ ] apps/demo 存在
1065
+ - [ ] 可以成功引用 koatty 包
1066
+ - [ ] 可以构建和运行
1067
+
1068
+ **测试命令**:
1069
+ ```bash
1070
+ cd apps/demo
1071
+ pnpm install
1072
+ pnpm build
1073
+ ```
1074
+
1075
+ **回滚方案**:
1076
+ ```bash
1077
+ rm -rf apps/demo
1078
+ ```
1079
+
1080
+ ---
1081
+
1082
+ ### TASK-5.6: 生成最终报告
1083
+
1084
+ **目标**: 生成完整的迁移验证报告
1085
+
1086
+ **前置条件**:
1087
+ - TASK-5.5 完成
1088
+
1089
+ **执行步骤**:
1090
+ 1. 汇总所有 reports/ 中的文件
1091
+ 2. 生成迁移检查清单
1092
+ 3. 生成下一步建议
1093
+ 4. 创建 MIGRATION_COMPLETE.md
1094
+
1095
+ **验收标准**:
1096
+ - [ ] reports/ 包含所有阶段的报告
1097
+ - [ ] MIGRATION_COMPLETE.md 存在
1098
+ - [ ] 包含成功/失败统计
1099
+ - [ ] 包含下一步行动建议
1100
+
1101
+ **测试命令**:
1102
+ ```bash
1103
+ ls -la reports/
1104
+ cat MIGRATION_COMPLETE.md
1105
+ ```
1106
+
1107
+ **回滚方案**:
1108
+ - 无需回滚
1109
+
1110
+ **输出文件**:
1111
+ ```markdown
1112
+ # MIGRATION_COMPLETE.md
1113
+
1114
+ ## 迁移状态: ✅ 成功
1115
+
1116
+ ### 完成的任务
1117
+ - [x] 环境准备 (3/3)
1118
+ - [x] 创建 Monorepo (5/5)
1119
+ - [x] 迁移核心包 (8/8)
1120
+ - [x] 配置构建系统 (6/6)
1121
+ - [x] 配置自动同步 (5/5)
1122
+ - [x] 测试与验证 (6/6)
1123
+
1124
+ ### 迁移统计
1125
+ - 迁移的包: 7个
1126
+ - 保持独立: 4个 (koatty_container, koatty_lib, koatty_loader, koatty_logger)
1127
+ - 构建状态: ✅ 成功
1128
+ - 测试状态: ✅ 通过
1129
+ - Turborepo 缓存: ✅ 工作正常
1130
+
1131
+ ### 下一步行动
1132
+ 1. [ ] 提交初始 commit
1133
+ 2. [ ] 推送到 GitHub
1134
+ 3. [ ] 配置 SYNC_TOKEN secret
1135
+ 4. [ ] 测试 GitHub Actions
1136
+ 5. [ ] 更新文档
1137
+ 6. [ ] 通知团队
1138
+
1139
+ ### 验证命令
1140
+ \```bash
1141
+ # 开发
1142
+ pnpm dev
1143
+
1144
+ # 构建
1145
+ pnpm build
1146
+
1147
+ # 测试
1148
+ pnpm test
1149
+
1150
+ # 同步
1151
+ ./scripts/sync-to-repos.sh
1152
+ \```
1153
+
1154
+ ### 相关文档
1155
+ - [docs/README_MONOREPO.md](docs/README_MONOREPO.md)
1156
+ - [docs/MONOREPO_ARCHITECTURE.md](docs/MONOREPO_ARCHITECTURE.md)
1157
+ - [docs/MONOREPO_SYNC_STRATEGY.md](docs/MONOREPO_SYNC_STRATEGY.md)
1158
+ ```
1159
+
1160
+ ---
1161
+
1162
+ ## 附录
1163
+
1164
+ ### A. 任务执行规范
1165
+
1166
+ 1. **顺序执行**: 必须按照 TASK-X.Y 的顺序执行
1167
+ 2. **验收确认**: 每个任务完成后必须通过所有验收标准
1168
+ 3. **测试命令**: 必须运行测试命令验证结果
1169
+ 4. **报告输出**: 重要任务需要生成报告文件
1170
+ 5. **回滚能力**: 如果任务失败,使用回滚方案恢复
1171
+
1172
+ ### B. 常用命令
1173
+
1174
+ ```bash
1175
+ # 查看当前状态
1176
+ git status
1177
+ pnpm list --depth=1
1178
+
1179
+ # 清理
1180
+ pnpm clean
1181
+ rm -rf node_modules pnpm-lock.yaml
1182
+
1183
+ # 重新安装
1184
+ pnpm install
1185
+
1186
+ # 构建
1187
+ pnpm build
1188
+
1189
+ # 测试
1190
+ pnpm test
1191
+ ```
1192
+
1193
+ ### C. 报告文件清单
1194
+
1195
+ - `reports/node-version.txt` - Node.js 版本
1196
+ - `reports/pnpm-version.txt` - pnpm 版本
1197
+ - `reports/backup-branch.txt` - 备份分支名
1198
+ - `reports/directory-structure.txt` - 目录结构
1199
+ - `reports/git-remotes.txt` - Git remotes
1200
+ - `reports/migration-summary.txt` - 迁移摘要
1201
+ - `reports/dependencies.txt` - 依赖关系
1202
+ - `reports/dependency-tree.txt` - 依赖树
1203
+ - `reports/build-result.txt` - 构建结果
1204
+ - `reports/test-result.txt` - 测试结果
1205
+ - `reports/cache-validation.txt` - 缓存验证
1206
+ - `reports/workspace-validation.txt` - Workspace 验证
1207
+
1208
+ ### D. 检查清单
1209
+
1210
+ 完成所有任务后,确认:
1211
+
1212
+ - [ ] 所有33个任务都已完成
1213
+ - [ ] 所有验收标准都通过
1214
+ - [ ] 所有测试命令都成功
1215
+ - [ ] reports/ 目录包含所有报告
1216
+ - [ ] MIGRATION_COMPLETE.md 已生成
1217
+ - [ ] 可以运行 pnpm build 和 pnpm test
1218
+ - [ ] workspace 协议正常工作
1219
+ - [ ] Turborepo 缓存正常工作
1220
+
1221
+ ---
1222
+
1223
+ **任务清单版本**: 1.0
1224
+ **创建日期**: 2025-10-22
1225
+ **预计执行时间**: 5-7天
1226
+ **目标**: 完成 Koatty Monorepo 迁移
1227
+