1
0
Files
nex/openspec/specs/bundle-optimization/spec.md
lanyuanxiaoyao b3258e76df perf: 前端打包产物优化——路由级懒加载和 vendor 分包
- 使用 React.lazy() + Suspense 实现路由级代码分割
- 配置 manualChunks 将 react/tdesign/recharts 拆分为独立 vendor chunk
- 页面组件改为 export default 以支持动态导入
- 新增 bundle-optimization 规范,更新 frontend 导航规范
2026-04-23 00:26:54 +08:00

53 lines
1.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 前端构建包优化
## Purpose
TBD - 配置 Vite 构建优化策略,包括路由级代码分割和 Vendor 分包
## Requirements
### Requirement: 路由级代码分割
前端 SHALL 使用 `React.lazy()` 和动态 `import()` 实现路由级代码分割,每个页面组件按需加载。
#### Scenario: 页面组件懒加载
- **WHEN** 应用启动
- **THEN** 路由配置 SHALL 使用 `lazy(() => import(...))` 导入所有页面组件ProvidersPage、StatsPage、SettingsPage、NotFound
- **THEN** 页面组件 SHALL NOT 使用静态 `import` 语句直接导入
#### Scenario: Suspense 加载边界
- **WHEN** 页面 chunk 尚未加载完成
- **THEN** 路由出口 SHALL 显示 TDesign `Loading` 组件作为 fallback
- **THEN** `Suspense` 边界 SHALL 包裹在 `<Routes>` 外层
### Requirement: Vendor 分包
前端 SHALL 配置 Vite `build.rollupOptions.output.manualChunks` 将第三方库拆分为独立 chunk。
#### Scenario: React 核心 chunk
- **WHEN** 执行生产构建
- **THEN** react、react-dom、react-router SHALL 被打包为独立 chunkvendor-react
#### Scenario: TDesign chunk
- **WHEN** 执行生产构建
- **THEN** tdesign-react、tdesign-icons-react SHALL 被打包为独立 chunkvendor-tdesign
#### Scenario: Recharts chunk
- **WHEN** 执行生产构建
- **THEN** recharts SHALL 被打包为独立 chunkvendor-recharts
#### Scenario: chunk 告警阈值
- **WHEN** 执行生产构建
- **THEN** `build.chunkSizeWarningLimit` SHALL 设置为 700避免 vendor chunk 误触发告警
#### Scenario: chunk 命名
- **WHEN** 执行生产构建
- **THEN** vendor chunk 文件名 SHALL 包含 chunk 名称前缀(如 `vendor-react-[hash].js`