# 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