Archived
feat: 前端迁移 React 18 + Vite 5 脚手架与保真移植的控制器
为什么:index.html 单体 4600 行 ES5 已到维护极限,迁移到 Vite 工程 获得热更新、类型检查与模块化能力。迁移策略是保真优先——业务逻辑 不重写为 React 组件(行为漂移风险),而是逐字移植为 legacy.ts/auth.ts 两个 @ts-nocheck 控制器模块;React 只接管静态 骨架与响应式显隐(tab/modal/drawer/toast),动态列表/播放器/歌词 仍走 id + innerHTML 命令式更新。 关键决策: - boot 包装:旧脚本原在 body 末尾可直取 DOM,模块化后顶层事件 绑定会在 import 求值时打在 null 上,全部副作用包进 __legacyBoot()/__authBoot() 由 App useEffect 骨架落盘后调用 - 轻量 store:单一可变 AppState + notify() + useSyncExternalStore, 沿用旧版"改 state 后手动通知"心智模型 - modalBus:弹窗栈 + useSyncExternalStore,Escape 走 closeTopmost, stats/cookie 弹窗经 __legacyApi 调 legacy 内部专用关闭(清定时器/ 复位视图) - vite 固定产物文件名(无内容 hash),保证 index.html 字节级稳定, golden sha256 契约才跨构建成立
This commit is contained in:
1 parent
0dbbb3ed63
commit
3a089caff2
15 files changed
+11089
No files matched your search
@@ -0,0 +1,35 @@
|
||||
// Vite 配置:构建产物输出到 frontend/dist,后端 web/routers/index.py 直接服务它。
|
||||
// 开发模式:API 全在根路径(/song、/search、/auth/...),把非 Vite 内部路径全部
|
||||
// 反代到本机后端(uvicorn 0.0.0.0:5000),浏览器里前后端如同同源。
|
||||
import { defineConfig } from 'vite'
|
||||
import react from '@vitejs/plugin-react'
|
||||
|
||||
const BACKEND = process.env.BACKEND_ORIGIN || 'http://127.0.0.1:5000'
|
||||
|
||||
export default defineConfig({
|
||||
plugins: [react()],
|
||||
build: {
|
||||
outDir: 'dist',
|
||||
sourcemap: true,
|
||||
// 固定产物文件名(不带内容 hash):index.html 字节级稳定,
|
||||
// tests/test_golden.py 的黄金快照契约才能跨构建成立
|
||||
rollupOptions: {
|
||||
output: {
|
||||
entryFileNames: 'assets/app.js',
|
||||
chunkFileNames: 'assets/[name].js',
|
||||
assetFileNames: 'assets/app.[ext]',
|
||||
},
|
||||
},
|
||||
},
|
||||
server: {
|
||||
port: 5173,
|
||||
proxy: {
|
||||
// Vite 自身路径放行,其余(API 与页面)全部反代后端
|
||||
'/@vite': { target: BACKEND, bypass: (req) => req.url || undefined },
|
||||
'/@react-refresh': { target: BACKEND, bypass: (req) => req.url || undefined },
|
||||
'/src': { target: BACKEND, bypass: (req) => req.url || undefined },
|
||||
'/node_modules': { target: BACKEND, bypass: (req) => req.url || undefined },
|
||||
'/': { target: BACKEND, changeOrigin: true },
|
||||
},
|
||||
},
|
||||
})
|
||||
Reference in new issue
Block a user