第14章 完整项目实战
16 分钟阅读
Chapter-14-Project-Practice
第14章:完整项目实战
纸上得来终觉浅,绝知此事要躬行。
前面 13 章我们学了 Vite 的各种知识点,但"知道"和"会用"之间还隔着一道鸿沟——实战。这一章,我们要跨过这道鸿沟。
我们将从零开始,搭建一个完整的前端项目:从需求分析到技术选型,从目录结构到代码规范,从功能开发到测试,从移动端适配到国际化,从性能优化到 CI/CD 部署。
准备好了吗?让我们开始这场"真刀真枪"的实战!💪
14.1 项目需求分析
14.1.1 功能需求梳理
在动手写代码之前,我们先来梳理一下需求。假设我们要做一个"任务管理系统"。
用户角色:
- 普通用户:创建任务、管理自己的任务
- 管理员:管理所有用户和任务
功能模块:
flowchart TD
A[任务管理系统] --> B[用户模块]
A --> C[任务模块]
A --> D[标签模块]
A --> E[统计模块]
B --> B1[注册/登录]
B --> B2[个人资料]
B --> B3[权限管理]
C --> C1[创建任务]
C --> C2[编辑任务]
C --> C3[删除任务]
C --> C4[完成任务]
C --> C5[任务列表]
C --> C6[任务详情]
D --> D1[创建标签]
D --> D2[标签筛选]
E --> E1[完成统计]
E --> E2[趋势图表]页面结构:
- 首页(Dashboard)
- 登录/注册
- 任务列表
- 任务详情
- 创建/编辑任务
- 个人中心
- 管理后台(管理员)
14.1.2 技术选型决策
前端框架选择:
| 框架 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| Vue 3 | 上手快,文档好,Vue DevTools | 团队需要熟悉 Vue | 快速迭代,中小型项目 |
| React 18 | 生态大,灵活性高 | 上手稍难 | 大型项目,复杂交互 |
我们选择 Vue 3 + TypeScript,因为:
- Vue 3 的 Composition API 和 TypeScript 结合非常好
- Vite 对 Vue 3 的支持是官方级别的
- 学习曲线相对平缓
技术栈清单:
| 类别 | 技术选型 | 理由 |
|---|---|---|
| 框架 | Vue 3 + TypeScript | 类型安全,开发体验好 |
| 构建工具 | Vite 5 | 极速 HMR,社区活跃 |
| 路由 | Vue Router 4 | Vue 官方路由 |
| 状态管理 | Pinia | Vue 官方推荐,比 Vuex 简洁 |
| UI 组件库 | Element Plus | Vue 3 生态成熟 |
| HTTP 客户端 | Axios | 功能完善,拦截器强大 |
| 图表库 | ECharts | 功能强大,社区活跃 |
| 国际化 | Vue I18n | Vue 官方国际化方案 |
| CSS 预处理器 | SCSS | 成熟,生态好 |
| 单元测试 | Vitest | Vite 原生,Vue 官方推荐 |
| E2E 测试 | Playwright | 微软出品,跨浏览器支持好 |
| CI/CD | GitHub Actions | 免费,集成方便 |
14.1.3 项目结构设计
目录结构:
my-task-app/
├── public/ # 静态资源
│ ├── favicon.ico
│ └── robots.txt
│
├── src/
│ ├── api/ # API 接口
│ │ ├── index.ts # API 统一导出
│ │ ├── user.ts # 用户相关 API
│ │ ├── task.ts # 任务相关 API
│ │ └── types.ts # API 类型定义
│ │
│ ├── assets/ # 资源文件
│ │ ├── images/ # 图片
│ │ ├── styles/ # 全局样式
│ │ │ ├── variables.scss
│ │ │ ├── mixins.scss
│ │ │ └── index.scss
│ │ └── fonts/ # 字体
│ │
│ ├── components/ # 公共组件
│ │ ├── ui/ # 基础 UI 组件
│ │ │ ├── Button.vue
│ │ │ ├── Input.vue
│ │ │ └── Modal.vue
│ │ ├── layout/ # 布局组件
│ │ │ ├── AppHeader.vue
│ │ │ ├── AppSidebar.vue
│ │ │ └── AppFooter.vue
│ │ └── common/ # 通用业务组件
│ │ ├── TaskCard.vue
│ │ └── UserAvatar.vue
│ │
│ ├── composables/ # 组合式函数
│ │ ├── useAuth.ts
│ │ ├── useTasks.ts
│ │ └── usePagination.ts
│ │
│ ├── layouts/ # 页面布局
│ │ ├── DefaultLayout.vue
│ │ ├── AuthLayout.vue
│ │ └── AdminLayout.vue
│ │
│ ├── locales/ # 国际化
│ │ ├── zh-CN.ts
│ │ └── en.ts
│ │
│ ├── router/ # 路由配置
│ │ ├── index.ts
│ │ └── guards.ts # 路由守卫
│ │
│ ├── stores/ # Pinia 状态
│ │ ├── user.ts
│ │ ├── task.ts
│ │ └── app.ts
│ │
│ ├── types/ # TypeScript 类型
│ │ ├── user.ts
│ │ ├── task.ts
│ │ └── api.ts
│ │
│ ├── utils/ # 工具函数
│ │ ├── format.ts
│ │ ├── validate.ts
│ │ └── storage.ts
│ │
│ ├── views/ # 页面组件
│ │ ├── home/
│ │ │ └── HomeView.vue
│ │ ├── auth/
│ │ │ ├── LoginView.vue
│ │ │ └── RegisterView.vue
│ │ ├── tasks/
│ │ │ ├── TaskListView.vue
│ │ │ ├── TaskDetailView.vue
│ │ │ └── TaskCreateView.vue
│ │ ├── user/
│ │ │ └── ProfileView.vue
│ │ └── admin/
│ │ └── AdminView.vue
│ │
│ ├── App.vue # 根组件
│ ├── main.ts # 入口文件
│ └── env.d.ts # 环境变量类型
│
├── tests/ # 测试文件
│ ├── unit/ # 单元测试
│ │ ├── utils/
│ │ └── composables/
│ └── e2e/ # E2E 测试
│ └── specs/
│
├── mock/ # Mock 数据
│ ├── index.ts
│ ├── user.ts
│ └── task.ts
│
├── .env.development # 开发环境变量
├── .env.production # 生产环境变量
├── .eslintrc.cjs # ESLint 配置
├── .prettierrc # Prettier 配置
├── .editorconfig # 编辑器配置
├── index.html # 入口 HTML
├── vite.config.ts # Vite 配置
├── tsconfig.json # TypeScript 配置
├── package.json
└── README.md
14.2 项目搭建
14.2.1 初始化项目
创建项目:
| |
安装依赖详解:
| |
14.2.2 目录结构规划
创建目录结构:
| |
14.2.3 基础配置完成
ESLint 配置:
| |
Prettier 配置:
| |
EditorConfig:
| |
Git Hooks(使用 Husky):
| |
package.json 添加 lint-staged:
| |
14.3 功能开发
14.3.1 路由与页面结构
路由配置:
| |
14.3.2 状态管理实现
用户状态:
| |
任务状态:
| |
14.3.3 API 接口封装
Axios 实例配置:
| |
API 接口定义:
| |
14.3.4 组件库搭建
基础 Button 组件:
| |
14.3.5 表单与验证
使用 Element Plus 的表单验证:
| |
14.3.6 权限管理
权限指令:
| |
权限判断工具:
| |
14.4 移动端适配
14.4.1 视口配置
| |
14.4.2 rem 适配方案
| |
14.4.3 vw/vh 适配方案
| |
14.4.4 移动端调试
| |
14.5 国际化
14.5.1 多语言配置
| |
| |
i18n 配置:
| |
14.5.2 语言切换功能
| |
14.6 性能优化
14.6.1 代码分割
| |
14.6.2 图片优化
| |
14.6.3 缓存策略
| |
14.7 优化与部署
14.7.1 构建配置优化
| |
14.7.2 CI/CD 配置
.github/workflows/deploy.yml:
| |
14.7.3 部署上线
部署到 Vercel:
| |
部署到 Netlify:
| |
14.7.4 Docker 部署
Dockerfile:
| |
nginx.conf:
| |
14.8 项目总结
14.8.1 问题与解决方案
| 问题 | 解决方案 |
|---|---|
| 跨域问题 | Vite 代理配置 |
| 移动端适配 | rem + viewport |
| 代码分割 | 动态导入 |
| 类型安全 | TypeScript |
| 测试覆盖 | Vitest + Playwright |
| CI/CD | GitHub Actions |
| 部署 | Docker + Nginx |
14.8.2 最佳实践总结
- 项目结构:清晰的分层,合理的目录组织
- TypeScript:严格的类型检查,减少运行时错误
- 代码规范:ESLint + Prettier + Husky
- 组件设计:高内聚,低耦合,可复用
- 状态管理:Pinia 集中管理,清晰的数据流
- API 封装:Axios 统一配置,统一的错误处理
- 测试:单元测试 + E2E 测试
- 性能优化:代码分割,懒加载,缓存策略
- CI/CD:自动化构建、测试、部署
14.9 本章小结
🎉 本章总结
这一章我们从零开始搭建了一个完整的前端项目,涵盖了:
需求分析:功能模块划分、技术选型决策、项目结构设计
项目搭建:初始化项目、目录结构规划、ESLint/Prettier/Husky 配置
功能开发:路由配置、Pinia 状态管理、Axios API 封装、组件库搭建、表单验证、权限管理
移动端适配:视口配置、rem 适配、vw/vh 适配、移动端调试
国际化:多语言配置、语言切换功能
性能优化:代码分割、图片优化、缓存策略
部署上线:构建优化、GitHub Actions CI/CD、Vercel/Netlify 部署、Docker 部署
📝 本章练习
完整项目:按照本章的流程,搭建一个自己的项目
添加功能:为项目添加更多功能(评论、通知、分享等)
完善测试:为项目编写单元测试和 E2E 测试
部署上线:将项目部署到 Vercel 或 Netlify
性能优化:分析产物,优化分包策略,提升 Lighthouse 分数
📌 预告:下一章我们将进入 Vite 核心原理,学习开发服务器原理、热更新(HMR)原理、依赖预构建、生产构建原理等。敬请期待!