# 构建配置 **本文引用的文件** - [vite.config.ts](file://my-uniapp-vue3/vite.config.ts) - [package.json](file://my-uniapp-vue3/package.json) - [tsconfig.json](file://my-uniapp-vue3/tsconfig.json) - [main.ts](file://my-uniapp-vue3/src/main.ts) - [env.d.ts](file://my-uniapp-vue3/src/env.d.ts) - [manifest.json](file://my-uniapp-vue3/src/manifest.json) - [pages.json](file://my-uniapp-vue3/src/pages.json) - [DEPLOY.md](file://DEPLOY.md) - [deploy.sh](file://deploy.sh) - [deploy-prod.sh](file://deploy-prod.sh) ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) 3. [核心组件](#核心组件) 4. [架构总览](#架构总览) 5. [详细组件分析](#详细组件分析) 6. [依赖关系分析](#依赖关系分析) 7. [性能考虑](#性能考虑) 8. [故障排查指南](#故障排查指南) 9. [结论](#结论) 10. [附录](#附录) ## 简介 本文件面向“AI有声书生成平台”的前端构建与部署,聚焦于 Vite 构建工具在 uni-app 场景下的配置与优化、多平台编译与打包策略、开发与生产环境差异、热更新机制、代码分割与资源压缩、CDN 集成思路,以及部署前准备与运维要点。内容基于仓库中实际存在的配置文件与脚本进行梳理与说明。 ## 项目结构 前端工程位于 my-uniapp-vue3 目录,采用 uni-app + Vue3 + Vite 的组合,通过 @dcloudio/vite-plugin-uni 提供多端编译支持;后端工程位于 server 目录,使用 Node.js + Express + Prisma;部署脚本位于根目录,包含本地构建与远程部署流程。 ```mermaid graph TB subgraph "前端(uni-app)" VCFG["vite.config.ts"] PKG["package.json"] TS["tsconfig.json"] MAIN["src/main.ts"] ENV["src/env.d.ts"] MANI["src/manifest.json"] PAGES["src/pages.json"] end subgraph "后端(Node.js)" SAPP["server/src/app.ts"] SCONF["server/src/config/index.ts"] SDEP["server/package.json"] end subgraph "部署脚本" DSH["deploy.sh"] DPROM["deploy-prod.sh"] DMD["DEPLOY.md"] end VCFG --> PKG PKG --> MAIN MAIN --> MANI MAIN --> PAGES VCFG -. 代理/服务 .-> SAPP DSH --> VCFG DPROM --> VCFG DMD --> DSH DMD --> DPROM ``` 图表来源 - [vite.config.ts:1-24](file://my-uniapp-vue3/vite.config.ts#L1-L24) - [package.json:1-65](file://my-uniapp-vue3/package.json#L1-L65) - [tsconfig.json:1-14](file://my-uniapp-vue3/tsconfig.json#L1-L14) - [main.ts:1-32](file://my-uniapp-vue3/src/main.ts#L1-L32) - [manifest.json:1-52](file://my-uniapp-vue3/src/manifest.json#L1-L52) - [pages.json:1-211](file://my-uniapp-vue3/src/pages.json#L1-L211) - [deploy.sh:1-209](file://deploy.sh#L1-L209) - [deploy-prod.sh:1-171](file://deploy-prod.sh#L1-L171) - [DEPLOY.md:1-251](file://DEPLOY.md#L1-L251) 章节来源 - [vite.config.ts:1-24](file://my-uniapp-vue3/vite.config.ts#L1-L24) - [package.json:1-65](file://my-uniapp-vue3/package.json#L1-L65) - [tsconfig.json:1-14](file://my-uniapp-vue3/tsconfig.json#L1-L14) - [main.ts:1-32](file://my-uniapp-vue3/src/main.ts#L1-L32) - [manifest.json:1-52](file://my-uniapp-vue3/src/manifest.json#L1-L52) - [pages.json:1-211](file://my-uniapp-vue3/src/pages.json#L1-L211) - [deploy.sh:1-209](file://deploy.sh#L1-L209) - [deploy-prod.sh:1-171](file://deploy-prod.sh#L1-L171) - [DEPLOY.md:1-251](file://DEPLOY.md#L1-L251) ## 核心组件 - Vite 构建配置:定义插件、开发服务器代理、跨域与本地联调。 - uni-app 编译:通过 @dcloudio/vite-plugin-uni 实现 H5、小程序、快应用等多端输出。 - TypeScript 配置:启用 sourceMap、路径别名、类型声明。 - 应用入口:创建 SSR App、初始化 Pinia、条件性引入 vConsole。 - Manifest/Pages:页面路由、TabBar、模块与权限声明。 - 部署脚本:本地构建、远程同步、Nginx 配置、PM2 启动与备份。 章节来源 - [vite.config.ts:1-24](file://my-uniapp-vue3/vite.config.ts#L1-L24) - [package.json:1-65](file://my-uniapp-vue3/package.json#L1-L65) - [tsconfig.json:1-14](file://my-uniapp-vue3/tsconfig.json#L1-L14) - [main.ts:1-32](file://my-uniapp-vue3/src/main.ts#L1-L32) - [manifest.json:1-52](file://my-uniapp-vue3/src/manifest.json#L1-L52) - [pages.json:1-211](file://my-uniapp-vue3/src/pages.json#L1-L211) - [deploy.sh:1-209](file://deploy.sh#L1-L209) - [deploy-prod.sh:1-171](file://deploy-prod.sh#L1-L171) - [DEPLOY.md:1-251](file://DEPLOY.md#L1-L251) ## 架构总览 下图展示从开发到生产的整体流程:本地 Vite 启动与代理,uni-app 多端编译,本地/远程构建产物,Nginx 反向代理与静态资源缓存,PM2 管理后端服务。 ```mermaid sequenceDiagram participant Dev as "开发者" participant Vite as "Vite 开发服务器" participant Uni as "@dcloudio/vite-plugin-uni" participant Build as "构建产物(dist)" participant Nginx as "Nginx" participant PM2 as "PM2" participant API as "后端服务" Dev->>Vite : 启动开发服务器 Vite->>Uni : 触发多端编译 Uni-->>Build : 输出 H5/小程序/快应用等 Dev->>Nginx : 访问前端静态页(反向代理) Nginx->>API : 将 /api 前缀转发至后端 PM2->>API : 管理进程与自动重启 ``` 图表来源 - [vite.config.ts:7-22](file://my-uniapp-vue3/vite.config.ts#L7-L22) - [package.json:4-37](file://my-uniapp-vue3/package.json#L4-L37) - [DEPLOY.md:61-116](file://DEPLOY.md#L61-L116) - [deploy.sh:178-201](file://deploy.sh#L178-L201) ## 详细组件分析 ### Vite 构建配置与插件 - 插件:使用 @dcloudio/vite-plugin-uni,负责 uni-app 多端编译。 - 开发服务器:配置 /api、/uploads、/videos 三类请求代理到本地后端,便于前后端联调。 - 适用场景:本地开发时,避免 CORS 与跨域问题,统一走本地 3000 端口。 ```mermaid flowchart TD Start(["Vite 启动"]) --> Proxy["配置代理规则
/api -> http://localhost:3000
/uploads -> http://localhost:3000
/videos -> http://localhost:3000"] Proxy --> DevServe["启动开发服务器"] DevServe --> Build["触发 uni-app 编译"] Build --> Dist["生成多端产物"] Dist --> End(["联调/预览"]) ``` 图表来源 - [vite.config.ts:5-22](file://my-uniapp-vue3/vite.config.ts#L5-L22) 章节来源 - [vite.config.ts:1-24](file://my-uniapp-vue3/vite.config.ts#L1-L24) ### uni-app 编译与多平台打包 - 脚本命令:通过 uni 与 uni build 支持 H5、微信小程序、支付宝小程序、百度小程序、今日头条、快手、Harmony、小红书、快应用 Webview 等平台。 - 平台差异:不同平台在 manifest.json 中声明模块、权限、SDK 配置;pages.json 统一页面与 TabBar 配置。 - 构建产物:H5 默认输出至 dist/h5;其他平台输出至对应目录(由 uni-app 插件决定)。 ```mermaid flowchart TD CMD["执行构建脚本
uni / uni build"] --> UniPlugin["@dcloudio/vite-plugin-uni"] UniPlugin --> H5["H5 产物"] UniPlugin --> MP["小程序/快应用 产物"] H5 --> Dist["dist/h5"] MP --> Out["各平台输出目录"] ``` 图表来源 - [package.json:4-37](file://my-uniapp-vue3/package.json#L4-L37) - [manifest.json:8-39](file://my-uniapp-vue3/src/manifest.json#L8-L39) - [pages.json:1-211](file://my-uniapp-vue3/src/pages.json#L1-L211) 章节来源 - [package.json:1-65](file://my-uniapp-vue3/package.json#L1-L65) - [manifest.json:1-52](file://my-uniapp-vue3/src/manifest.json#L1-L52) - [pages.json:1-211](file://my-uniapp-vue3/src/pages.json#L1-L211) ### TypeScript 与类型声明 - tsconfig:启用 sourceMap,配置路径别名 @/*,指定 lib 与类型声明。 - env.d.ts:为 .vue 文件提供类型支持,确保 IDE 正确识别单文件组件。 ```mermaid graph LR TS["tsconfig.json"] --> Alias["@/* 别名"] TS --> Lib["lib: esnext, dom"] TS --> Src["include: *.ts, *.vue"] ENV["src/env.d.ts"] --> VueType[".vue 类型声明"] ``` 图表来源 - [tsconfig.json:1-14](file://my-uniapp-vue3/tsconfig.json#L1-L14) - [env.d.ts:1-9](file://my-uniapp-vue3/src/env.d.ts#L1-L9) 章节来源 - [tsconfig.json:1-14](file://my-uniapp-vue3/tsconfig.json#L1-L14) - [env.d.ts:1-9](file://my-uniapp-vue3/src/env.d.ts#L1-L9) ### 应用入口与运行时初始化 - 入口函数 createApp:创建 SSR App、注册 Pinia、初始化用户状态。 - 条件引入 vConsole:H5 环境下可按需启用移动端调试面板。 ```mermaid sequenceDiagram participant Entry as "入口(main.ts)" participant App as "SSR App" participant Store as "Pinia" participant User as "用户状态" Entry->>App : createSSRApp(App) Entry->>Store : createPinia() Entry->>User : useUserStore().initUser() Note over Entry,App : H5 下可选择性启用 vConsole ``` 图表来源 - [main.ts:10-31](file://my-uniapp-vue3/src/main.ts#L10-L31) 章节来源 - [main.ts:1-32](file://my-uniapp-vue3/src/main.ts#L1-L32) ### 页面与清单配置 - pages.json:集中声明页面路径、导航样式、TabBar 列表与全局样式。 - manifest.json:声明 app 名称、版本、plus 模块与权限、小程序 SDK 配置等。 ```mermaid graph TB PAGES["pages.json"] --> Pages["页面列表/导航/TabBar"] MANI["manifest.json"] --> AppInfo["应用信息/版本"] MANI --> Modules["模块/权限/SDK"] PAGES --> UI["页面样式/交互"] MANI --> Runtime["运行时配置"] ``` 图表来源 - [pages.json:1-211](file://my-uniapp-vue3/src/pages.json#L1-L211) - [manifest.json:1-52](file://my-uniapp-vue3/src/manifest.json#L1-L52) 章节来源 - [pages.json:1-211](file://my-uniapp-vue3/src/pages.json#L1-L211) - [manifest.json:1-52](file://my-uniapp-vue3/src/manifest.json#L1-L52) ### 开发环境配置与热更新 - 代理配置:将 /api、/uploads、/videos 请求代理到本地后端,便于联调。 - HMR:Vite 默认提供模块热替换,配合 uni-app 插件实现多端热更新体验。 - 调试:H5 环境可按需启用 vConsole 进行移动端调试。 章节来源 - [vite.config.ts:7-22](file://my-uniapp-vue3/vite.config.ts#L7-L22) - [main.ts:20-25](file://my-uniapp-vue3/src/main.ts#L20-L25) ### 生产环境优化与部署准备 - 本地构建:分别对后端与前端执行构建,生成 dist 与 dist/h5。 - 远程部署:通过 scp/sftp 将 dist 与 server 发布到服务器,备份旧版本,安装生产依赖,生成 Prisma 客户端。 - Nginx:配置前端静态站点与后端 API 反代,设置缓存头与安全头。 - PM2:以守护进程方式启动后端服务,设置开机自启与日志管理。 ```mermaid flowchart TD LBuild["本地构建
后端: npm run build
前端: uni build(h5)"] --> Sync["同步到服务器"] Sync --> Backup["备份旧版本"] Backup --> Install["安装生产依赖/生成 Prisma 客户端"] Install --> Nginx["配置 Nginx 反代与缓存"] Nginx --> PM2["PM2 启动后端服务"] PM2 --> Verify["健康检查与日志查看"] ``` 图表来源 - [deploy.sh:22-31](file://deploy.sh#L22-L31) - [deploy.sh:54-89](file://deploy.sh#L54-L89) - [DEPLOY.md:61-116](file://DEPLOY.md#L61-L116) - [deploy-prod.sh:137-164](file://deploy-prod.sh#L137-L164) 章节来源 - [deploy.sh:1-209](file://deploy.sh#L1-L209) - [deploy-prod.sh:1-171](file://deploy-prod.sh#L1-L171) - [DEPLOY.md:1-251](file://DEPLOY.md#L1-L251) ### 代码分割策略 - uni-app 多端编译:由 @dcloudio/vite-plugin-uni 控制分包与按需加载,结合 pages.json 的页面拆分实现天然的代码分割。 - 建议实践:将业务页面按模块拆分,减少首屏体积;对第三方库进行外部化或动态导入,降低主包大小。 章节来源 - [package.json:52-62](file://my-uniapp-vue3/package.json#L52-L62) - [pages.json:1-211](file://my-uniapp-vue3/src/pages.json#L1-L211) ### 资源压缩与缓存 - 前端静态资源:Nginx 对 JS/CSS/PNG/JPG/GIF/ICO/WOFF/WOFF2/TTF/EOT 等设置长缓存与 immutable。 - 后端 API:通过反向代理将 /api 前缀转发至后端,避免静态资源混淆。 - 建议:开启 Gzip/Brotli 压缩与 HTTP/2,合理设置 Cache-Control 与 ETag。 章节来源 - [DEPLOY.md:97-101](file://DEPLOY.md#L97-L101) - [vite.config.ts:9-20](file://my-uniapp-vue3/vite.config.ts#L9-L20) ### CDN 集成方案 - 方案思路:将静态资源(JS/CSS/媒体)托管至 CDN,回源至 Nginx;对版本化文件设置长缓存,非版本化文件短缓存或不缓存。 - 注意事项:确保 CDN 与源站的缓存头一致,避免跨域与证书问题;对 /api 前缀保持直连后端。 章节来源 - [DEPLOY.md:90-101](file://DEPLOY.md#L90-L101) ## 依赖关系分析 - 构建链路:package.json 的 scripts 通过 uni/uni build 调用 @dcloudio/vite-plugin-uni,后者读取 vite.config.ts 的插件与代理配置。 - 运行链路:Nginx 将 /api 前缀代理至后端,PM2 管理 Node.js 进程;前端通过 dist/h5 提供静态页面。 ```mermaid graph LR Scripts["package.json scripts"] --> UniPlugin["@dcloudio/vite-plugin-uni"] UniPlugin --> ViteCfg["vite.config.ts"] ViteCfg --> Dist["dist/h5"] Dist --> Nginx["Nginx 静态站点"] Nginx --> API["/api 反代后端"] API --> PM2["PM2 管理后端"] ``` 图表来源 - [package.json:4-37](file://my-uniapp-vue3/package.json#L4-L37) - [vite.config.ts:5-6](file://my-uniapp-vue3/vite.config.ts#L5-L6) - [DEPLOY.md:64-81](file://DEPLOY.md#L64-L81) 章节来源 - [package.json:1-65](file://my-uniapp-vue3/package.json#L1-L65) - [vite.config.ts:1-24](file://my-uniapp-vue3/vite.config.ts#L1-L24) - [DEPLOY.md:1-251](file://DEPLOY.md#L1-L251) ## 性能考虑 - 构建性能:优先使用 SSD、合理配置 node_modules 缓存;在 CI 中复用依赖缓存。 - 传输性能:开启 gzip/br 压缩与 HTTP/2;CDN 回源使用就近节点。 - 运行性能:合理拆分页面与懒加载;对大体积第三方库进行动态导入;利用浏览器缓存与 ETag。 ## 故障排查指南 - 后端无法启动 - 检查端口占用与环境变量,查看 PM2 日志。 - 前端无法访问 - 检查 Nginx 配置与站点权限,确认 dist 目录存在。 - 数据库连接失败 - 检查数据库服务状态与连接配置文件。 章节来源 - [DEPLOY.md:199-214](file://DEPLOY.md#L199-L214) ## 结论 本项目采用 Vite + uni-app 的现代化前端构建体系,结合 Nginx 与 PM2 的稳定后端部署,形成从开发到生产的完整闭环。通过代理联调、多端编译、静态资源缓存与进程守护,能够满足 AI 有声书平台在多平台与高并发场景下的交付需求。后续可在 CDN 集成、代码分割与缓存策略上进一步优化。 ## 附录 - 常用命令 - 开发:H5 开发、小程序开发、SSR 开发等。 - 构建:H5 构建、SSR 构建、各平台构建。 - 部署脚本 - deploy.sh:本地构建、远程同步、Nginx 配置、PM2 启动。 - deploy-prod.sh:生产环境一键部署脚本,含 Node.js 检测与备份。 章节来源 - [package.json:4-37](file://my-uniapp-vue3/package.json#L4-L37) - [deploy.sh:1-209](file://deploy.sh#L1-L209) - [deploy-prod.sh:1-171](file://deploy-prod.sh#L1-L171)