1.5 KiB
1.5 KiB
前端 TypeScript + esbuild 迁移计划
决策:Q1(a) 单文件 ESM chat.js;Q2 esbuild;Q3 构建产物入库;Q4 node --test + Node 原生 TS(禁 enum/namespace 等不可擦除语法)。
目标结构
frontend/
package.json / tsconfig.json / esbuild.config.mjs
src/{types,api,dom,state,ws,main}.ts
tests/{state,ws}.test.ts
- 构建产物:
src/genesis/server/static/chat.js(ESM,入库)。 chat_state.js/chat_ws.js删除(并入 bundle)。chat.html:<script type="module" src="/static/chat.js?v=__ASSET_VER__">。app.py_asset_names→chat.html, chat.css, chat.js, favicon.svg。- Python 测试
/static/chat_state.js、/static/chat_ws.js→ 改指向/static/chat.js。 - 旧
tests/test_chat_state.js、tests/test_chat_ws.js→ 迁移到frontend/tests/*.test.ts。
任务
- 工具链:package.json / tsconfig(strict) / esbuild.config.mjs。
- 基础设施:types.ts / api.ts / dom.ts。
- 迁移 state.ts(纯函数)+ tests/state.test.ts。
- 迁移 ws.ts + tests/ws.test.ts。
- 迁移 main.ts(业务 + DOM,类型化)。
- 构建产物、改 chat.html、删旧 js、改 app.py
_asset_names。 - 改 Python 测试 + 删旧 Node 测试。
npm run typecheck+npm test+python -m pytest(≥99%)。- 文档/日志/提交。
风险
strict下 DOM 引用需类型化(用must/maybe助手)。- Node 原生 TS 依赖 Node ≥23.6(本机 24)。