bxztApp/README.md

277 lines
5.8 KiB
Markdown
Raw Normal View History

2025-10-15 14:07:39 +08:00
# 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