1
0
Files
DiAL/openspec/specs/frontend-development-workflow/spec.md
lanyuanxiaoyao d6a77b2c6e feat: 迁移前端构建从 Bun fullstack 到 Vite
前端性能问题根因在于 Bun bundler 无法有效 code split、CSS
tree-shake 和产出优化的前端资源。经多轮 Bun 原生优化尝试
均无明显效果后,决定将前端构建迁回 Vite。

主要变更:

- 前端构建:从 Bun HTML import bundling 切换为 Vite build
  (Rolldown code splitting、vendor chunk、CSS 优化)
- 开发模式:从 Bun fullstack 单进程 HMR 切换为 Vite dev
  server + Bun API server 双进程(:5173 + :3000)
- 生产构建:三步流水线(Vite build → code generation →
  Bun compile),通过 `import with { type: "file" }` 嵌入前端资源
- 静态资源服务:从 Bun HTML import manifest 切换为自定义
  serveStaticAsset 函数,支持 SPA fallback 和正确的 Cache-Control
- Server 接口:BootstrapOptions 和 StartServerOptions 增加
  staticAssets? 可选参数
- 文档更新:DEVELOPMENT.md 和 README.md 反映新的开发模式,
  主 specs 同步 delta 变更

新增能力:
- static-asset-embedding: 构建时资源扫描与 code generation、
  运行时静态资源服务
- vite-frontend-bundling: Vite 构建配置、code splitting 策略、
  CSS 处理
2026-05-15 11:26:46 +08:00

72 lines
3.3 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
定义基于 Vite dev server + Bun API server 的前端开发工作流、开发期 API 访问和共享契约的行为要求。
## Requirements
### Requirement: Vite React 开发服务器
系统 SHALL 提供基于 Vite dev server 的前端开发工作流,支持热模块替换和 React Fast Refresh。
#### Scenario: 启动前端开发服务器
- **WHEN** 开发者启动开发命令
- **THEN** 前端 SHALL 由 Vite dev server 提供服务,支持 HMR 和 React Fast Refresh监听 :5173 端口
#### Scenario: 构建前端静态资源
- **WHEN** 开发者运行前端生产构建命令
- **THEN** 系统 SHALL 通过 Vite buildRolldown产出优化的前端静态资源到 `dist/web/`
### Requirement: 前端开发期 API 代理
前端开发服务器 SHALL 通过 Vite proxy 配置将 API 请求转发到后端 server。
#### Scenario: 前端开发期调用拨测 API
- **WHEN** 浏览器从 Vite dev server 请求 `/api/*` 路径
- **THEN** Vite SHALL 通过 proxy 将请求转发到 Bun API server默认 :3000
#### Scenario: 前端开发期访问健康检查
- **WHEN** 浏览器从 Vite dev server 请求 `/health`
- **THEN** Vite SHALL 通过 proxy 将请求转发到 Bun API server
#### Scenario: 开发期访问非 API 前端路由
- **WHEN** 浏览器从 Vite dev server 请求非 API 前端路由
- **THEN** Vite SHALL 将该请求作为前端应用流量处理SPA fallback 返回 HTML
### Requirement: 开发期双进程运行
项目 SHALL 在开发命令中同时启动 Vite dev server 和 Bun API server 两个进程。
#### Scenario: 使用默认开发端口
- **WHEN** 开发者运行开发命令
- **THEN** Vite dev server SHALL 监听 :5173Bun API server SHALL 监听配置文件指定的端口(默认 :3000
#### Scenario: 开发者访问前端
- **WHEN** 开发者打开浏览器
- **THEN** 开发者 SHALL 访问 Vite dev server 地址(:5173获取前端页面
### Requirement: 前端使用相对 API 路径
除非有文档化的部署配置覆盖该行为,前端代码 MUST 通过相对 `/api/*` URL 调用后端 API。
#### Scenario: 前端获取后端数据
- **WHEN** 前端代码调用后端 API
- **THEN** 请求 URL 默认 MUST 使用相对 `/api/*` 路径
#### Scenario: 运行环境变化
- **WHEN** host 或 port 在开发环境和生产环境之间变化
- **THEN** 前端 API 调用 SHALL 无需修改源码即可继续工作(开发期通过 Vite proxy生产期通过同源请求
### Requirement: 集成开发命令
项目 SHALL 提供一个文档化命令,用于在开发期间同时运行 Vite dev server 和 Bun API server。
#### Scenario: 启动全栈开发
- **WHEN** 开发者运行文档化的全栈开发命令
- **THEN** 系统 SHALL 同时启动 Vite dev server 和 Bun API server任一进程异常退出时终止另一个
### Requirement: 共享 TypeScript 契约
项目 SHALL 为前端和后端共同使用的请求与响应类型提供共享 TypeScript 边界。
#### Scenario: 定义 API 响应结构
- **WHEN** 前端和后端都需要某个 API 响应类型
- **THEN** 该类型 SHALL 定义在 shared 模块中,而不是在两端重复定义
#### Scenario: 前端导入共享类型
- **WHEN** 前端代码导入共享 API 类型
- **THEN** 该导入 SHALL 不要求将后端运行时实现打包进前端