# 构建与部署
**本文引用的文件**
- [vite.config.js](file://frontend/vite.config.js)
- [package.json](file://frontend/package.json)
- [DEBUG_GUIDE.md](file://frontend/DEBUG_GUIDE.md)
- [frontend.md](file://docs/frontend.md)
- [main.js](file://frontend/src/main.js)
- [router/index.js](file://frontend/src/router/index.js)
- [api/request.js](file://frontend/src/api/request.js)
- [stores/user.js](file://frontend/src/stores/user.js)
- [assets/main.scss](file://frontend/src/assets/main.scss)
- [test-api.html](file://frontend/public/test-api.html)
- [test-api.html](file://frontend/dist/test-api.html)
- [test_frontend_connection.py](file://test_frontend_connection.py)
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能考量](#性能考量)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
本指南面向前端构建与部署,围绕 Vite 构建配置、环境变量、资源优化、静态资源与代码分割、打包分析、生产构建与 CDN 缓存策略、容器化与 Nginx 反向代理、自动化部署与 CI/CD、版本发布管理、性能监控与错误追踪、用户体验优化以及调试与性能分析方法进行系统化说明。文档同时结合仓库现有前端工程与配套文档,确保内容可落地、可验证。
## 项目结构
前端工程采用 Vite + Vue 3 + Pinia + Element Plus 的现代前端技术栈,源码位于 frontend 目录,构建产物输出至 dist 目录;开发时通过 Vite Dev Server 提供本地服务与代理能力;路由、状态管理、HTTP 客户端等关键模块均在 src 目录下组织。
```mermaid
graph TB
subgraph "前端工程(frontend)"
SRC["src 源码
main.js/router/api/stores/assets"]
DIST["dist 构建产物"]
VCFG["vite.config.js"]
PKG["package.json"]
PUB["public 静态资源"]
end
SRC --> VCFG
SRC --> PKG
VCFG --> DIST
PKG --> DIST
PUB --> DIST
```
图表来源
- [vite.config.js](file://frontend/vite.config.js#L1-L22)
- [package.json](file://frontend/package.json#L1-L27)
章节来源
- [vite.config.js](file://frontend/vite.config.js#L1-L22)
- [package.json](file://frontend/package.json#L1-L27)
- [frontend.md](file://docs/frontend.md#L1-L416)
## 核心组件
- 构建与开发服务器
- Vite 插件与别名配置、开发服务器端口与代理规则
- 开发脚本、构建脚本与预览脚本
- 应用入口与全局依赖
- 应用挂载、插件注册、国际化与全局样式引入
- 路由与导航
- 基于 History 模式的路由配置与前置守卫
- 状态管理
- Pinia Store 的用户状态与登录流程
- HTTP 客户端
- Axios 实例、基础地址、超时、请求/响应拦截器与错误处理
- 样式与主题
- 全局 SCSS 变量、布局与组件样式规范
- 调试与测试工具
- 内置 API 测试页面与前端连通性测试脚本
章节来源
- [vite.config.js](file://frontend/vite.config.js#L1-L22)
- [package.json](file://frontend/package.json#L1-L27)
- [main.js](file://frontend/src/main.js#L1-L24)
- [router/index.js](file://frontend/src/router/index.js#L1-L116)
- [stores/user.js](file://frontend/src/stores/user.js#L1-L49)
- [api/request.js](file://frontend/src/api/request.js#L1-L66)
- [assets/main.scss](file://frontend/src/assets/main.scss#L1-L186)
- [DEBUG_GUIDE.md](file://frontend/DEBUG_GUIDE.md#L1-L119)
- [frontend.md](file://docs/frontend.md#L1-L416)
## 架构总览
前端应用通过 Vite 构建,开发时由 Vite Dev Server 提供本地服务与代理,生产时生成静态资源并由 Nginx 提供静态文件服务与反向代理。HTTP 请求通过 Axios 发送,统一拦截处理错误与鉴权逻辑;路由守卫保障登录态校验;Pinia 管理用户状态。
```mermaid
graph TB
Browser["浏览器客户端"] --> ViteDev["Vite 开发服务器
端口:5173"]
ViteDev --> Proxy["代理规则
/api -> 后端"]
Browser --> BuildOut["构建产物 dist/*"]
BuildOut --> Nginx["Nginx 反向代理"]
Nginx --> Backend["后端服务"]
subgraph "前端应用"
Axios["Axios 实例
拦截器/错误处理"]
Router["Vue Router
前置守卫"]
Stores["Pinia Store
用户状态"]
end
Browser --> Axios
Browser --> Router
Browser --> Stores
Axios --> Proxy
Proxy --> Backend
```
图表来源
- [vite.config.js](file://frontend/vite.config.js#L12-L20)
- [api/request.js](file://frontend/src/api/request.js#L5-L12)
- [router/index.js](file://frontend/src/router/index.js#L103-L113)
- [stores/user.js](file://frontend/src/stores/user.js#L6-L48)
## 详细组件分析
### Vite 构建与开发服务器
- 插件与别名
- 使用 Vue 插件与路径别名 @ 指向 src,便于导入
- 开发服务器
- 端口 5173,默认启用
- 代理 /api 到后端地址,解决开发跨域问题
- 构建与脚本
- 提供 dev/build/preview 三个常用脚本,满足开发、构建与本地预览
```mermaid
flowchart TD
Start(["启动 Vite"]) --> LoadCfg["加载 vite.config.js"]
LoadCfg --> Plugins["初始化插件与别名"]
Plugins --> DevServer["启动开发服务器
端口:5173"]
DevServer --> ProxyRule["配置 /api 代理"]
ProxyRule --> Ready(["开发就绪"])
```
图表来源
- [vite.config.js](file://frontend/vite.config.js#L5-L21)
章节来源
- [vite.config.js](file://frontend/vite.config.js#L1-L22)
- [package.json](file://frontend/package.json#L6-L10)
### 应用入口与全局依赖
- 应用挂载与插件
- 注册 Pinia、Vue Router、Element Plus 并设置中文语言包
- 注册 Element Plus 图标组件
- 全局样式
- 引入全局 SCSS,包含主题变量、布局与组件样式
```mermaid
sequenceDiagram
participant Entry as "main.js"
participant App as "Vue 应用"
participant Router as "Vue Router"
participant Pinia as "Pinia"
participant EP as "Element Plus"
Entry->>App : createApp(App)
Entry->>Pinia : app.use(createPinia())
Entry->>Router : app.use(router)
Entry->>EP : app.use(ElementPlus, { locale })
Entry->>App : mount("#app")
```
图表来源
- [main.js](file://frontend/src/main.js#L12-L23)
章节来源
- [main.js](file://frontend/src/main.js#L1-L24)
- [assets/main.scss](file://frontend/src/assets/main.scss#L1-L186)
### 路由与导航
- 路由配置
- 基于 History 模式,定义多级路由与懒加载页面
- 前置守卫
- 未登录访问受保护路由时重定向至登录页
- 动态设置页面标题
```mermaid
flowchart TD
Enter["进入路由"] --> Guard["前置守卫"]
Guard --> HasToken{"是否存在 token?"}
HasToken --> |是| Allow["放行"]
HasToken --> |否| ToLogin["重定向 /login"]
Allow --> Render["渲染目标页面"]
ToLogin --> End(["结束"])
Render --> End
```
图表来源
- [router/index.js](file://frontend/src/router/index.js#L103-L113)
章节来源
- [router/index.js](file://frontend/src/router/index.js#L1-L116)
### 状态管理(用户)
- 用户状态
- 存储 token 与用户信息,提供登录、获取用户信息、登出方法
- 登出时清除 token 并跳转登录页
```mermaid
classDiagram
class UserStore {
+string token
+object userInfo
+login(username, password) Promise~boolean~
+getUserInfo() Promise~object|null~
+logout() void
}
class AuthAPI {
+login(data) Promise
+getCurrentUser() Promise
}
UserStore --> AuthAPI : "调用"
```
图表来源
- [stores/user.js](file://frontend/src/stores/user.js#L6-L48)
- [api/request.js](file://frontend/src/api/request.js#L1-L66)
章节来源
- [stores/user.js](file://frontend/src/stores/user.js#L1-L49)
### HTTP 客户端与错误处理
- Axios 实例
- 基础地址指向 /api/v1,统一超时与 Content-Type
- 请求拦截器
- 自动附加 Bearer Token
- 响应拦截器
- 统一错误提示与 401 跳转登录
- 对不同状态码给出明确提示
```mermaid
sequenceDiagram
participant Comp as "组件"
participant Store as "Pinia Store"
participant API as "API 函数"
participant Axios as "Axios 实例"
participant Inter as "拦截器"
participant BE as "后端"
Comp->>Store : 触发业务动作
Store->>API : 调用 API 函数
API->>Axios : 发起请求
Axios->>Inter : 请求拦截器注入 Authorization
Inter->>BE : 发送请求
BE-->>Inter : 返回响应
Inter-->>Axios : 响应拦截器处理
Axios-->>API : 返回数据/抛错
API-->>Store : 更新状态/提示
Store-->>Comp : 视图更新
```
图表来源
- [api/request.js](file://frontend/src/api/request.js#L5-L66)
章节来源
- [api/request.js](file://frontend/src/api/request.js#L1-L66)
### 样式与主题
- 全局变量与主题色
- 定义主色、状态色、文本色、边框色与背景色
- 布局与组件样式
- 侧边栏、头部、主区域、表格、卡片、状态标签、分数等级、图表容器等样式规范
章节来源
- [assets/main.scss](file://frontend/src/assets/main.scss#L1-L186)
### 调试与测试工具
- 内置 API 测试页面
- 提供健康检查与登录测试,便于快速验证前后端连通性
- 前端连通性测试脚本
- 检查 CORS 配置、登录接口可用性与返回值
章节来源
- [DEBUG_GUIDE.md](file://frontend/DEBUG_GUIDE.md#L1-L119)
- [test-api.html](file://frontend/public/test-api.html#L39-L75)
- [test_frontend_connection.py](file://test_frontend_connection.py#L38-L74)
## 依赖关系分析
- 组件耦合
- main.js 作为入口,集中注册插件与依赖
- router/index.js 与 stores/user.js 彼此独立,通过业务调用交互
- api/request.js 作为 HTTP 客户端被各 API 模块复用
- 外部依赖
- Vue 3、Vue Router、Pinia、Axios、Element Plus、ECharts、Day.js、Vite、Sass
```mermaid
graph LR
Main["main.js"] --> Router["router/index.js"]
Main --> Pinia["stores/*"]
Main --> EP["Element Plus"]
Router --> Views["views/*"]
Pinia --> API["api/*"]
API --> Request["api/request.js"]
Request --> Axios["axios"]
```
图表来源
- [main.js](file://frontend/src/main.js#L1-L24)
- [router/index.js](file://frontend/src/router/index.js#L1-L116)
- [stores/user.js](file://frontend/src/stores/user.js#L1-L49)
- [api/request.js](file://frontend/src/api/request.js#L1-L66)
章节来源
- [package.json](file://frontend/package.json#L11-L25)
## 性能考量
- 构建与资源优化
- 使用 Vite 的原生按需加载与 Tree Shaking,减少初始包体
- 将第三方 UI 组件与图表库按需引入,避免全量打包
- 代码分割
- 路由级懒加载与组件级拆分,配合 Vite 的动态导入实现自然分割
- 打包分析
- 建议使用 Vite 插件进行体积分析,定位大体积依赖与重复模块
- 生产构建
- 使用构建脚本生成 dist,开启压缩与哈希命名,便于缓存与回滚
- CDN 与缓存
- 将静态资源托管至 CDN,设置长缓存与版本化文件名;对 HTML 设置短缓存
- 运行时性能
- 合理使用虚拟滚动、防抖与节流;对图表与大数据表格进行分页与懒加载
[本节为通用指导,不直接分析具体文件]
## 故障排查指南
- 常见问题与解决
- CORS 错误:属预期行为,检查后端 CORS 配置
- 404:检查 Vite 代理配置与后端路由
- 500:检查后端日志与数据库状态
- Network Error:确认后端服务已启动
- 调试步骤
- 打开浏览器开发者工具,查看 Console 与 Network
- 使用内置 API 测试页面与连通性脚本快速定位问题
- 清除浏览器缓存与 localStorage,执行硬刷新
- 重启后端与前端开发服务器
章节来源
- [DEBUG_GUIDE.md](file://frontend/DEBUG_GUIDE.md#L10-L95)
- [test_frontend_connection.py](file://test_frontend_connection.py#L38-L74)
## 结论
本指南基于仓库现有前端工程与文档,系统梳理了 Vite 构建配置、开发代理、HTTP 客户端、路由与状态管理、样式体系与调试工具,并给出了生产构建、CDN 与缓存、容器化与 Nginx 反向代理、自动化部署与版本管理、性能监控与错误追踪、用户体验优化与调试分析的实践建议。建议在实际部署中结合团队规范与基础设施,逐步完善 CI/CD 与监控体系,持续优化构建与运行时性能。
[本节为总结性内容,不直接分析具体文件]
## 附录
### A. Vite 构建与环境变量
- 构建脚本
- 开发:npm run dev
- 构建:npm run build
- 预览:npm run preview
- 环境变量
- 建议通过 .env 文件管理 API 基础地址、CDN 基础路径等,避免硬编码
- 在 Vite 中可通过 import.meta.env 访问
章节来源
- [package.json](file://frontend/package.json#L6-L10)
- [frontend.md](file://docs/frontend.md#L380-L394)
### B. 静态资源处理、代码分割与打包分析
- 静态资源
- public 目录用于放置无需打包的静态资源;构建后与 dist 对齐
- 代码分割
- 路由懒加载与组件拆分天然实现分割;可结合 Vite 插件进行可视化分析
- 打包分析
- 推荐使用 @rollup/plugin-visualizer 或 vite-bundle-analyzer
章节来源
- [frontend.md](file://docs/frontend.md#L17-L48)
- [router/index.js](file://frontend/src/router/index.js#L1-L116)
### C. 生产构建、CDN 与缓存策略
- 生产构建
- 使用 npm run build 生成 dist;确保代理与基础路径在生产环境关闭或适配
- CDN 与缓存
- 将 dist 下静态资源上传至 CDN;HTML 设置短缓存;JS/CSS 设置长缓存并带内容指纹
- 反向代理
- Nginx 将静态资源交由 Nginx 直接提供,/api 前缀转发至后端
[本节为通用指导,不直接分析具体文件]
### D. Docker 容器化与 Nginx 反向代理
- 容器化
- 使用 Nginx 镜像作为静态资源服务器,挂载 dist 目录
- Nginx 配置要点
- 静态文件根目录指向 dist
- /api 前缀代理至后端服务
- 设置缓存与 Gzip 压缩
- 反向代理
- 将前端域名解析到 Nginx,Nginx 负责静态资源与 API 转发
[本节为通用指导,不直接分析具体文件]
### E. 自动化部署、CI/CD 与版本发布
- CI/CD
- 在流水线中执行安装依赖、构建、测试与部署步骤
- 构建产物上传至制品库或直接部署到 Nginx
- 版本发布
- 使用语义化版本管理;构建产物与版本关联,便于回滚
[本节为通用指导,不直接分析具体文件]
### F. 性能监控、错误追踪与用户体验优化
- 性能监控
- 关注首屏时间、交互延迟与内存占用;结合浏览器性能面板与 Lighthouse
- 错误追踪
- 前端错误上报与后端错误日志联动;统一错误提示与用户引导
- 用户体验
- 加载骨架屏、空态与错误态;合理分页与搜索;移动端适配
[本节为通用指导,不直接分析具体文件]
### G. 调试工具使用与性能分析
- 调试工具
- 浏览器开发者工具、Vue DevTools、网络面板、性能面板
- 性能分析
- 关注资源加载顺序、缓存命中率与关键渲染路径
章节来源
- [DEBUG_GUIDE.md](file://frontend/DEBUG_GUIDE.md#L1-L119)