|
| 1 | +# TypeScript 迁移计划 - 快速执行版 |
| 2 | + |
| 3 | +## 分析报告概览 |
| 4 | + |
| 5 | +项目已完成基础配置和 50% 的核心文件迁移。剩余迁移工作需要优先处理高复杂度的系统核心文件,然后进行批量迁移。 |
| 6 | + |
| 7 | +## 迁移优先级 |
| 8 | + |
| 9 | +### 高优先级(立即处理) |
| 10 | +1. Window.jsx - 窗口管理核心组件 |
| 11 | +2. InternetExplorer.jsx - 浏览器应用,用户交互频繁 |
| 12 | +3. Explorer.jsx - 文件管理器,系统核心功能 |
| 13 | +4. registry/apps.jsx - 应用程序注册表 |
| 14 | + |
| 15 | +### 中优先级(第二阶段) |
| 16 | +1. QQLogin.jsx - 社交应用,视觉效果复杂 |
| 17 | +2. WindowsMediaPlayer.jsx - 媒体播放器 |
| 18 | +3. MicrosoftPaint.jsx - 绘图应用 |
| 19 | +4. Solitaire.jsx - 纸牌游戏 |
| 20 | + |
| 21 | +### 低优先级(批量处理) |
| 22 | +1. Calculator.jsx、HelpAndSupport.jsx、BrowserPlugins.jsx |
| 23 | +2. 其他简单应用程序(CommandPrompt、ControlPanel 等) |
| 24 | +3. 组件文件(Explorer 目录下的组件) |
| 25 | +4. 工具函数(emojiRenderer、soundManager) |
| 26 | + |
| 27 | +## 使用 Subagents 的快速迁移策略 |
| 28 | + |
| 29 | +### 策略一:使用 subagent 进行批量迁移简单文件 |
| 30 | +```bash |
| 31 | +# 1. 批量处理低优先级应用程序文件 |
| 32 | +find src/apps/ -name "*.jsx" -not -name "InternetExplorer.jsx" -not -name "Explorer.jsx" -not -name "QQLogin.jsx" -not -name "WindowsMediaPlayer.jsx" -not -name "MicrosoftPaint.jsx" -not -name "Solitaire.jsx" | xargs -I {} sh -c 'mv "{}" "$(dirname {})/$(basename {} .jsx).tsx"' |
| 33 | + |
| 34 | +# 2. 批量处理低优先级组件文件 |
| 35 | +find src/components/Explorer/ -name "*.jsx" -not -name "ExplorerSidebar.jsx" | xargs -I {} sh -c 'mv "{}" "$(dirname {})/$(basename {} .jsx).tsx"' |
| 36 | +``` |
| 37 | + |
| 38 | +### 策略二:使用 subagent 进行智能迁移 |
| 39 | +``` |
| 40 | +# 为每个高优先级文件创建单独的迁移任务 |
| 41 | +agent: |
| 42 | + - description: 迁移 Window.jsx |
| 43 | + type: general-purpose |
| 44 | + prompt: "将 src/components/Window.jsx 迁移到 TypeScript,确保类型定义与已存在的类型文件 src/types/index.ts 匹配" |
| 45 | + - description: 迁移 InternetExplorer.jsx |
| 46 | + type: general-purpose |
| 47 | + prompt: "将 src/apps/InternetExplorer.jsx 迁移到 TypeScript,重点关注 iframe 通信、历史记录管理、Wayback Machine 集成" |
| 48 | + - description: 迁移 Explorer.jsx |
| 49 | + type: general-purpose |
| 50 | + prompt: "将 src/apps/Explorer.jsx 迁移到 TypeScript,关注文件系统操作、路径解析、拖拽操作" |
| 51 | + - description: 迁移 apps.jsx |
| 52 | + type: general-purpose |
| 53 | + prompt: "将 src/registry/apps.jsx 迁移到 TypeScript,确保应用程序注册表与类型定义匹配" |
| 54 | +``` |
| 55 | + |
| 56 | +## 迁移执行计划 |
| 57 | + |
| 58 | +### 第一天:批量迁移简单文件 |
| 59 | +1. 批量处理低优先级应用程序文件(11个) |
| 60 | +2. 批量处理低优先级组件文件(4个) |
| 61 | +3. 迁移工具函数文件 |
| 62 | +4. 运行构建检查 |
| 63 | + |
| 64 | +### 第二天:迁移核心文件 |
| 65 | +1. 迁移 Window.jsx |
| 66 | +2. 迁移 registry/apps.jsx |
| 67 | +3. 运行基础测试 |
| 68 | +4. 修复编译错误 |
| 69 | + |
| 70 | +### 第三天:处理复杂应用 |
| 71 | +1. 迁移 InternetExplorer.jsx |
| 72 | +2. 迁移 Explorer.jsx |
| 73 | +3. 测试浏览器和文件管理器功能 |
| 74 | + |
| 75 | +### 第四天:处理其他复杂应用 |
| 76 | +1. 迁移 QQLogin.jsx |
| 77 | +2. 迁移 WindowsMediaPlayer.jsx |
| 78 | +3. 迁移 MicrosoftPaint.jsx |
| 79 | +4. 迁移 Solitaire.jsx |
| 80 | + |
| 81 | +### 第五天:收尾工作 |
| 82 | +1. 迁移 Minesweeper.jsx |
| 83 | +2. 清理重复文件 |
| 84 | +3. 运行所有测试 |
| 85 | +4. 最终构建验证 |
| 86 | + |
| 87 | +## 快速测试验证策略 |
| 88 | + |
| 89 | +### 构建验证 |
| 90 | +```bash |
| 91 | +npm run build # 检查编译错误 |
| 92 | +npm run build 2>&1 | grep -E "error|warning" # 仅显示错误和警告 |
| 93 | +``` |
| 94 | + |
| 95 | +### 快速测试套件 |
| 96 | +```bash |
| 97 | +npm run test -- --run --no-watch # 运行所有测试 |
| 98 | +npm run test -- --run --reporter verbose # 详细测试输出 |
| 99 | + |
| 100 | +# 重点测试文件 |
| 101 | +npm run test -- --run src/apps/__tests__/basic.test.js |
| 102 | +npm run test -- --run src/apps/__tests__/Desktop_refresh.test.jsx |
| 103 | +npm run test -- --run src/apps/__tests__/ExplorerBroken.test.jsx |
| 104 | +``` |
| 105 | + |
| 106 | +### 开发服务器验证 |
| 107 | +```bash |
| 108 | +npm run dev # 启动开发服务器 |
| 109 | +# 访问 http://localhost:5173 进行手动测试 |
| 110 | +``` |
| 111 | + |
| 112 | +## 预期成果 |
| 113 | + |
| 114 | +### 代码库状态变化 |
| 115 | +- 100% TypeScript 文件 |
| 116 | +- 所有 .jsx 文件转换为 .tsx |
| 117 | +- 所有 .js 文件转换为 .ts |
| 118 | +- 重复文件清理完毕 |
| 119 | + |
| 120 | +### 测试覆盖 |
| 121 | +- 保持现有测试文件的可执行性 |
| 122 | +- 重点关注核心功能的测试 |
| 123 | +- 确保开发服务器能够正常启动 |
| 124 | + |
| 125 | +## 风险控制 |
| 126 | + |
| 127 | +### 备份策略 |
| 128 | +```bash |
| 129 | +# 在开始迁移前创建备份 |
| 130 | +git status |
| 131 | +git add src/ |
| 132 | +git commit -m "TypeScript migration initial backup" |
| 133 | +``` |
| 134 | + |
| 135 | +### 错误回滚 |
| 136 | +```bash |
| 137 | +# 如果出现严重错误,可以回滚到备份状态 |
| 138 | +git log --oneline | head -1 |
| 139 | +git reset --hard HEAD~1 |
| 140 | +``` |
| 141 | + |
| 142 | +## 迁移完成标准 |
| 143 | + |
| 144 | +### 技术标准 |
| 145 | +- `npm run build` 无错误 |
| 146 | +- `npm run test` 无失败 |
| 147 | +- 开发服务器正常启动 |
| 148 | +- 浏览器访问页面显示正常 |
| 149 | + |
| 150 | +### 业务标准 |
| 151 | +- 窗口管理功能正常 |
| 152 | +- 文件系统操作正常 |
| 153 | +- 浏览器应用可以打开网页 |
| 154 | +- 核心功能(开始菜单、任务栏、资源管理器)正常 |
| 155 | + |
| 156 | +## 后续优化 |
| 157 | + |
| 158 | +### 类型细化 |
| 159 | +1. 为复杂组件添加更详细的类型定义 |
| 160 | +2. 为 styled-components 添加类型 |
| 161 | +3. 优化现有类型定义的完整性 |
| 162 | + |
| 163 | +### 代码质量 |
| 164 | +1. 重构复杂组件的状态管理 |
| 165 | +2. 优化组件的类型安全性 |
| 166 | +3. 为所有组件添加 PropType 或类型注解 |
0 commit comments