277 lines
5.8 KiB
Markdown
277 lines
5.8 KiB
Markdown
|
|
# H5 Monorepo 工程
|
|||
|
|
|
|||
|
|
基于 pnpm workspace 的 Monorepo 项目,包含 Vue3 大屏和 Vue3 移动端两个子项目。
|
|||
|
|
|
|||
|
|
## 项目结构
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
H5/
|
|||
|
|
├── packages/
|
|||
|
|
│ ├── screen/ # Vue3 大屏项目
|
|||
|
|
│ │ ├── src/
|
|||
|
|
│ │ │ ├── views/
|
|||
|
|
│ │ │ ├── components/
|
|||
|
|
│ │ │ ├── router/
|
|||
|
|
│ │ │ ├── store/
|
|||
|
|
│ │ │ └── styles/
|
|||
|
|
│ │ ├── vite.config.js
|
|||
|
|
│ │ └── package.json
|
|||
|
|
│ ├── mobile/ # Vue3 移动端项目
|
|||
|
|
│ │ ├── src/
|
|||
|
|
│ │ │ ├── views/
|
|||
|
|
│ │ │ ├── components/
|
|||
|
|
│ │ │ ├── router/
|
|||
|
|
│ │ │ └── styles/
|
|||
|
|
│ │ ├── vite.config.js
|
|||
|
|
│ │ └── package.json
|
|||
|
|
│ └── shared/ # 共享代码库
|
|||
|
|
│ ├── api/ # 接口封装
|
|||
|
|
│ ├── utils/ # 工具函数
|
|||
|
|
│ ├── config/ # 配置文件
|
|||
|
|
│ └── package.json
|
|||
|
|
├── pnpm-workspace.yaml
|
|||
|
|
├── package.json
|
|||
|
|
└── README.md
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 技术栈
|
|||
|
|
|
|||
|
|
### 大屏项目 (screen)
|
|||
|
|
- Vue 3
|
|||
|
|
- Vite 5
|
|||
|
|
- Vue Router 4
|
|||
|
|
- Pinia
|
|||
|
|
- ECharts 5
|
|||
|
|
- Vue-ECharts
|
|||
|
|
- Sass
|
|||
|
|
|
|||
|
|
### 移动端项目 (mobile)
|
|||
|
|
- Vue 3
|
|||
|
|
- Vite 5
|
|||
|
|
- Vue Router 4
|
|||
|
|
- Pinia
|
|||
|
|
- Vant 4(移动端 UI 组件库)
|
|||
|
|
- 自动按需引入组件
|
|||
|
|
- Sass
|
|||
|
|
|
|||
|
|
### 共享库 (shared)
|
|||
|
|
- Axios(请求封装)
|
|||
|
|
- 工具函数(防抖/节流/日期格式化/深拷贝等)
|
|||
|
|
- 统一配置管理
|
|||
|
|
|
|||
|
|
## 快速开始
|
|||
|
|
|
|||
|
|
### 安装依赖
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 安装 pnpm (如果还没安装)
|
|||
|
|
npm install -g pnpm
|
|||
|
|
|
|||
|
|
# 安装所有依赖
|
|||
|
|
pnpm install
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 开发命令
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 启动大屏项目(端口:3000)
|
|||
|
|
pnpm dev:screen
|
|||
|
|
|
|||
|
|
# 启动 H5 移动端(端口:8080)
|
|||
|
|
pnpm dev:mobile
|
|||
|
|
|
|||
|
|
# 构建大屏项目
|
|||
|
|
pnpm build:screen
|
|||
|
|
|
|||
|
|
# 构建 H5 移动端
|
|||
|
|
pnpm build:mobile
|
|||
|
|
|
|||
|
|
# 构建所有项目
|
|||
|
|
pnpm build:all
|
|||
|
|
|
|||
|
|
# 代码检查
|
|||
|
|
pnpm lint
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 项目说明
|
|||
|
|
|
|||
|
|
### 1. 大屏项目 (screen)
|
|||
|
|
|
|||
|
|
**访问地址:** `http://localhost:3000`
|
|||
|
|
|
|||
|
|
**特点:**
|
|||
|
|
- 适配大屏分辨率 (1920x1080)
|
|||
|
|
- 数据可视化(ECharts)
|
|||
|
|
- 暗色主题设计
|
|||
|
|
- 响应式布局
|
|||
|
|
|
|||
|
|
**目录结构:**
|
|||
|
|
```
|
|||
|
|
packages/screen/src/
|
|||
|
|
├── views/ # 页面组件
|
|||
|
|
├── components/ # 通用组件
|
|||
|
|
├── router/ # 路由配置
|
|||
|
|
├── store/ # Pinia 状态管理
|
|||
|
|
├── assets/ # 静态资源
|
|||
|
|
└── styles/ # 全局样式
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 移动端项目 (mobile)
|
|||
|
|
|
|||
|
|
**访问地址:** `http://localhost:8080`
|
|||
|
|
|
|||
|
|
**特点:**
|
|||
|
|
- 响应式设计,适配移动端
|
|||
|
|
- Vant UI 组件库
|
|||
|
|
- 自动按需引入,减小包体积
|
|||
|
|
- 支持 PWA
|
|||
|
|
- 适合嵌入第三方 APP
|
|||
|
|
|
|||
|
|
**可用组件:**
|
|||
|
|
- NavBar(导航栏)
|
|||
|
|
- Tabbar(底部导航)
|
|||
|
|
- Cell/CellGroup(单元格列表)
|
|||
|
|
- Grid(宫格)
|
|||
|
|
- Button(按钮)
|
|||
|
|
- Toast(轻提示)
|
|||
|
|
- Dialog(弹窗)
|
|||
|
|
- Image(图片)
|
|||
|
|
- 等 60+ 组件
|
|||
|
|
|
|||
|
|
**目录结构:**
|
|||
|
|
```
|
|||
|
|
packages/mobile/src/
|
|||
|
|
├── views/ # 页面组件
|
|||
|
|
├── components/ # 通用组件
|
|||
|
|
├── router/ # 路由配置
|
|||
|
|
├── store/ # Pinia 状态管理
|
|||
|
|
├── assets/ # 静态资源
|
|||
|
|
└── styles/ # 全局样式
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 共享库 (shared)
|
|||
|
|
|
|||
|
|
共享代码可在两个项目中复用:
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
// 在项目中引入 API
|
|||
|
|
import { getUserInfo, getDataList } from '@shared/api'
|
|||
|
|
|
|||
|
|
// 引入工具函数
|
|||
|
|
import { formatDate, debounce, throttle } from '@shared/utils'
|
|||
|
|
|
|||
|
|
// 引入配置
|
|||
|
|
import { API_CONFIG, APP_CONFIG } from '@shared/config'
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**可用工具函数:**
|
|||
|
|
- `formatDate()` - 日期格式化
|
|||
|
|
- `debounce()` - 防抖
|
|||
|
|
- `throttle()` - 节流
|
|||
|
|
- `deepClone()` - 深拷贝
|
|||
|
|
|
|||
|
|
## 环境变量
|
|||
|
|
|
|||
|
|
项目使用 `.env` 文件管理环境变量:
|
|||
|
|
|
|||
|
|
- `.env.development` - 开发环境
|
|||
|
|
- `.env.production` - 生产环境
|
|||
|
|
|
|||
|
|
**示例:**
|
|||
|
|
```bash
|
|||
|
|
# .env.development
|
|||
|
|
VITE_API_BASE_URL=http://localhost:3000/api
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 开发建议
|
|||
|
|
|
|||
|
|
### 1. 共享代码复用
|
|||
|
|
|
|||
|
|
将通用的业务逻辑、API 接口、工具函数放在 `packages/shared` 中,避免重复代码。
|
|||
|
|
|
|||
|
|
### 2. 组件开发
|
|||
|
|
|
|||
|
|
- **大屏项目**:使用 ECharts 开发数据可视化组件
|
|||
|
|
- **移动端项目**:优先使用 Vant 组件,减少自定义开发
|
|||
|
|
|
|||
|
|
### 3. 样式规范
|
|||
|
|
|
|||
|
|
- 使用 Sass 预处理器
|
|||
|
|
- 遵循 BEM 命名规范
|
|||
|
|
- 组件样式使用 `scoped`
|
|||
|
|
|
|||
|
|
### 4. API 请求
|
|||
|
|
|
|||
|
|
统一使用 `@shared/api` 中封装的请求方法,自动处理 token、错误等。
|
|||
|
|
|
|||
|
|
## 注意事项
|
|||
|
|
|
|||
|
|
1. 本项目使用 **JavaScript**,未使用 TypeScript
|
|||
|
|
2. 使用 **pnpm** 作为包管理工具,不要使用 npm 或 yarn
|
|||
|
|
3. 大屏和移动端项目独立运行,通过 shared 包共享代码
|
|||
|
|
4. 移动端项目基于 Vue3 + Vant,**不是 uni-app**,仅支持 H5
|
|||
|
|
5. 如需扩展到小程序,建议使用 uni-app 或 Taro 重新搭建
|
|||
|
|
|
|||
|
|
## 部署说明
|
|||
|
|
|
|||
|
|
### 大屏项目部署
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 构建
|
|||
|
|
pnpm build:screen
|
|||
|
|
|
|||
|
|
# 构建产物在 packages/screen/dist
|
|||
|
|
# 部署到 Nginx 或其他静态服务器
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 移动端部署
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 构建
|
|||
|
|
pnpm build:mobile
|
|||
|
|
|
|||
|
|
# 构建产物在 packages/mobile/dist
|
|||
|
|
# 可以嵌入到第三方 APP 的 WebView 中
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 浏览器支持
|
|||
|
|
|
|||
|
|
### 大屏项目
|
|||
|
|
- Chrome >= 87
|
|||
|
|
- Firefox >= 78
|
|||
|
|
- Safari >= 14
|
|||
|
|
- Edge >= 88
|
|||
|
|
|
|||
|
|
### 移动端项目
|
|||
|
|
- iOS Safari >= 10
|
|||
|
|
- Android Chrome >= 5.0
|
|||
|
|
- 微信浏览器
|
|||
|
|
|
|||
|
|
## 常见问题
|
|||
|
|
|
|||
|
|
### 1. 端口被占用
|
|||
|
|
|
|||
|
|
修改对应项目的 `vite.config.js` 中的 `server.port` 配置。
|
|||
|
|
|
|||
|
|
### 2. 组件按需引入不生效
|
|||
|
|
|
|||
|
|
移动端项目使用 `unplugin-vue-components` 自动按需引入 Vant 组件,无需手动引入。
|
|||
|
|
|
|||
|
|
### 3. 如何添加新页面?
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 1. 在 src/views 中创建页面组件
|
|||
|
|
# 2. 在 src/router/index.js 中添加路由配置
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 技术支持
|
|||
|
|
|
|||
|
|
- Vue 3 文档:https://cn.vuejs.org/
|
|||
|
|
- Vant 文档:https://vant-ui.github.io/vant/
|
|||
|
|
- ECharts 文档:https://echarts.apache.org/zh/index.html
|
|||
|
|
- Pinia 文档:https://pinia.vuejs.org/zh/
|
|||
|
|
|
|||
|
|
## 许可证
|
|||
|
|
|
|||
|
|
MIT
|