# project-root **Repository Path**: bennywolf/project-root ## Basic Information - **Project Name**: project-root - **Description**: Monorepo + Turbo架构的全栈管理系统;由Express + React + Webpck + Antd + Redis + MySQL 实现; 提供主题切换、JWT认证,双Token无感刷新,错误监控,RBAC0 + 权限层级 + 数据范围权限管控,SSE通信(强制登出),自动编码、缓存管理(Redis + 内存)自动降级、日志管理、智谱(AI 对话)、版本管理(支持回滚)等 - **Primary Language**: JavaScript - **License**: MIT - **Default Branch**: master - **Homepage**: https://www.liyq666.top - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2025-12-12 - **Last Updated**: 2025-12-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 全栈管理系统 - Monorepo + Turbo 架构企业级解决方案 一个基于 **Monorepo + Turbo** 架构的现代化全栈管理系统,支持 **Docker 容器化部署**。后端提供 JWT 认证、审计日志与在线用户、SSE 实时通知、单点登录;前端提供动态权限路由与增强版 SSE Hook。采用 **PNPM** 管理依赖,支持并行构建和智能缓存。 ## 项目实例 ![alt text](./readme-images/image-0.png) ![alt text](./readme-images/image.png) ![alt text](./readme-images/image-1.png) ![alt text](./readme-images/image-2.png) ![alt text](./readme-images/image-3.png) ![alt text](./readme-images/image-4.png) ![alt text](./readme-images/image-5.png) ![alt text](./readme-images/image-6.png) ![alt text](./readme-images/image-7.png) ![alt text](./readme-images/image-8.png) ![alt text](./readme-images/image-9.png) ![alt text](./readme-images/image-10.png) ![alt text](./readme-images/image-11.png) ![alt text](./readme-images/image-12.png) ![alt text](./readme-images/image-13.png) ## 项目特性 ### 🏗️ Monorepo + Turbo 架构 - **Turbo 2.0.6** - 高性能并行构建系统 - **PNPM 10.24.0** - 快速、节省磁盘空间的包管理器 - **智能缓存** - 增量构建和依赖图优化 - **并行执行** - 多应用同时构建,提升开发效率 ### 🚀 Docker 容器化部署 - **auto-deploy.sh** - 全自动部署脚本,支持版本管理 - **前端版本管理** - 语义化版本控制,软链接切换 - **容器分离架构** - Backend、MySQL、Redis 独立容器 - **数据持久化** - 完整的数据备份和恢复机制 ### 后端能力 - JWT 双 Token 认证与权限控制(Access/Refresh) - 审计日志与来源采集(Referer、X-Client-Page),列表与详情查询 - 在线用户接口(基于审计窗口聚合,含来源页面、设备信息、会话信息) - 单点登录(SINGLE_LOGIN),登录时保留当前会话并清退其他会话;通过 SSE 发送下线通知 - SSE 实时通知(认证连接),心跳与连接统计;支持稳定客户端标识 `clientId` - 统一日志与请求 ID,中间件记录请求信息与敏感脱敏 - Token 管理与自动清理 - CORS 允许自定义头:`X-Client-Id`、`X-Client-Page` ### 前端能力 - React 18 + Antd 6 + Webpack 5 + Redux Toolkit + React Router 6 - 动态权限路由(后端返回菜单动态注册)与按钮级权限 - 增强版 `useSSE` Hook:自动认证、自动重连、心跳与事件订阅、稳定 `clientId` 持久化(`localStorage`) - 基础布局 `BasicLayout` 集成 SSE 事件(open/welcome/heartbeat/loginout),收到登录异常通知后自动退出 - **模块化消息管理** - useEventBus + useNotifier 事件总线架构 ## 📁 项目结构 ### Monorepo + Turbo 架构 ``` project-root/ # 项目根目录 ├── apps/ # 应用程序 │ ├── react-antd-webpack/ # React 前端应用 │ │ ├── build/ # Webpack 构建配置 │ │ ├── public/ # 静态资源 │ │ ├── src/ # 源代码 │ │ │ ├── components/ # 通用组件 │ │ │ ├── hooks/ # 自定义 Hooks │ │ │ ├── layouts/ # 布局组件 │ │ │ ├── pages/ # 页面模块 │ │ │ │ ├── architecture/ # 系统架构页面 │ │ │ │ ├── home/ # 首页 │ │ │ │ ├── login/ # 登录页面 │ │ │ │ └── setting/ # 系统设置 │ │ │ ├── router/ # 路由配置 │ │ │ ├── services/ # API 服务 │ │ │ ├── store/ # 状态管理 │ │ │ └── utils/ # 工具函数 │ │ └── package.json # 前端依赖配置 │ └── node-express-mysql/ # Node.js 后端应用 │ ├── config/ # 配置管理 │ ├── docs/ # 后端文档 │ ├── public/ # 静态资源 │ ├── sql/ # 数据库脚本 │ ├── src/ # 源代码 │ │ ├── cache/ # 缓存服务 │ │ ├── controllers/ # 控制器 │ │ ├── infra/ # 基础设施 │ │ ├── logger/ # 日志模块 │ │ ├── middlewares/ # 中间件 │ │ ├── models/ # 数据模型 │ │ ├── routes/ # 路由 │ │ ├── services/ # 业务服务 │ │ └── utils/ # 工具函数 │ └── package.json # 后端依赖配置 ├── docker_project/ # Docker 部署配置 │ ├── docker-compose.yml # 应用服务配置 │ ├── docker-compose/ # 基础设施服务 │ │ └── docker-compose.yml # MySQL + Redis │ ├── scripts/ # 部署脚本 │ │ ├── auto-deploy.sh # 主部署脚本 │ │ └── backup.sh # 备份脚本 │ └── .env.example # 环境变量模板 ├── doc/ # 项目文档 │ ├── Bash Shell脚本编写指南.md # Bash 脚本开发指南 │ ├── 部署文件清单.md # 部署配置文档 │ └── 手动部署指南.md # 手动部署说明 ├── packages/ # 共享包(预留) ├── turbo.json # Turbo 构建配置 ├── package.json # 根项目配置 └── README.md # 项目说明 ``` ## 缓存功能 - 架构:支持内存与 Redis 双实现,依据 `config/cache.js` 的 `type` 与 `config/redis` 自动选择;Redis 使用 `SCAN MATCH` 批量清理,避免阻塞。 - 键规范:统一通过 `generateCacheKey(module, resourceType, identifier, operation?)` 生成,例如: - 列表:`app:v1:permission:list:` - 单项:`app:v1:user:item:`、`app:v1:role:item:` - 用户角色:`app:v1:user:roles:` - 权限码:`app:v1:permission:codes:user:` - 模式清理:使用 `getCacheKeyPattern(module, resourceType)` 生成模式,示例: - 清理权限列表:`clearByPattern(getCacheKeyPattern('permission','list'))` - 清理角色列表:`clearByPattern(getCacheKeyPattern('role','list'))` - 清理用户统计:`clearByPattern(getCacheKeyPattern('user','stats'))` - 读缓存位置:模型/服务层统一设置读缓存(如 `withCache` 装饰器、`cacheService.get/set`),控制器层主要进行失效与聚合响应缓存。 - 失效策略:写操作完成后在控制器集中清理相关键(精确 `del` + 按模块模式 `clearByPattern`),确保响应与后端数据一致。 - 监控与日志:缓存操作由 `cacheMonitor` 记录命中率与耗时;日志模块输出结构化信息方便排查。 示例代码(列表缓存与清理): ```javascript const { generateCacheKey, getCacheKeyPattern } = require('./node-express-mysql/src/cache/utils/cacheKeyGenerator'); const cacheService = require('./node-express-mysql/src/cache/cacheService'); // 读取(命中则直接返回) const cacheKey = generateCacheKey('role','list', JSON.stringify({ page, limit, filters })); const cached = await cacheService.get(cacheKey); // 写入(查询后写入) await cacheService.set(cacheKey, { data, pagination }, null, 'role.list'); // 清理(写操作后) await cacheService.clearByPattern(getCacheKeyPattern('role','list')); ``` 更多规范见后端文档:`node-express-mysql/docs/3.缓存管理.md`、`node-express-mysql/docs/2.缓存键命名规范.md`。 ## 技术栈 ### 🏗️ 构建工具 - **Turbo** 2.0.6 - 高性能并行构建系统 - **PNPM** 10.24.0 - 快速、节省磁盘空间的包管理器 ### 🚀 部署工具 - **Docker** - 容器化部署 - **Docker Compose** - 容器编排 - **auto-deploy.sh** - 自动部署脚本 ### 🐳 后端技术栈 - **Node.js** >= 20.10.0 - JavaScript运行时 - **Express.js** 5.1.0 - Web应用框架 - **MySQL** >= 8.0 - 关系型数据库 - **Redis** - 缓存和会话存储 - **JWT** - JSON Web Token认证 - **bcryptjs** 3.0.2 - 密码加密 - **ioredis** 5.8.2 - Redis客户端 - **svg-captcha** - 图形验证码 - **multer** 2.0.2 - 文件上传 - **node-schedule** 2.1.1 - 定时任务 - **Swagger** - API文档 ### ⚛️ 前端技术栈 - **React** 18.2.0 - UI框架 - **Ant Design** 6.0.0 - UI组件库 - **Webpack** 5.99.9 - 模块打包器 - **Babel** 7.27.4 - JavaScript编译器 - **Redux Toolkit** 2.8.2 - 状态管理 - **React Router** 6.30.0 - 路由管理 - **Axios** 1.10.0 - HTTP客户端 - **Less** 4.3.0 - CSS预处理器 - **Day.js** 1.11.19 - 时间处理 - **ESLint** 9.39.1 - 代码规范 ### 📚 开发工具 - **ShellCheck** - Bash 脚本静态分析 - **shfmt** - Shell 代码格式化 - **Bats** - Bash 自动化测试 ## 权限设计 该项目的权限架构采用RBAC0 + 权限层级 + 数据域来设计,相比传统的5张数据库表,多了两张数据库表,分别是权限表和角色权限关联表,以角色为核心,通过角色与菜单/权限点/数据域的关联,实现细粒度的权限控制。 ### 四层模型 系统管理层(角色与层级)、功能模块层(菜单/模块)、操作权限层(权限点/接口/按钮)、数据权限层(部门/数据域)。 - 目标:更精细、更灵活的权限控制,满足复杂业务场景;兼容当前实现并可渐进增强。 - 用户层:`user`,账号主体,绑定所属部门与基础信息。 - 角色层:`role`,权限载体,聚合菜单/权限点/数据权限。 - 菜单/资源层:`menu`,页面/目录/按钮(`node_type`)与路由/组件,含权限编码 `code` 与访问类型 `access_type`(0-公共,1-私有)。 - 权限点/数据权限层:`permission` 作为操作点(接口/按钮)集合,`department` 作为数据域;通过关联表构成角色的操作与数据范围。 ### 数据库(7 张权限关联表) - `user`:用户表,含 `department_id` 等基础字段。 - `role`:角色表,含系统预置与保护标识(`is_system/is_protected`)。 - `menu`:菜单表,目录/菜单/按钮(`node_type=1/2/3`),权限编码 `code` 与路由/组件信息。 - `permission`:权限点表,定义接口/操作编码集合。 - `user_role`:用户与角色关联表(多对多)。 - `role_menu`:角色与菜单关联表(多对多),决定角色可见页面/按钮。 - `role_permission`:角色与权限点关联表(多对多),决定角色可用接口/操作。 - 扩展:`department` 与 `role_data_permission`(角色数据权限关联表)用于数据域授权,限定角色的数据访问范围。 ### 关联关系 - 用户→角色:`user_role`;一个用户可绑定多个角色。 - 角色→菜单:`role_menu`;决定该角色在前端可见的目录/页面/按钮集合。 - 角色→权限点:`role_permission`;决定该角色在后端可用的接口/操作集合。 - 角色→数据域:`role_data_permission`;定义角色在不同部门/数据范围内的可访问性。 ### 判定流程 - 后端接口权限: - 认证中间件校验 Token 并设置 `req.user`。 - 路由层使用权限校验中间件(如 `checkPermission('code')` 与等级 `checkPermissionLevel(40)`)核验权限码与安全等级。 - 权限码来源:菜单/权限表的 `code`,通过用户的角色聚合得到可用集合(`menuModel.getUserPermissionCodes`)。 - 前端页面权限: - 路由与菜单:后端返回的菜单按 `access_type` 与 `role_menu` 过滤;非超级管理员补齐父级目录,保证导航完整。 - 按钮权限:`AuthButton` 基于权限码 `code` 控制显隐(与后端同源编码)。 ### 超级管理员 - 统一判断:`utils.isSuperAdminById(userId)`,依据角色 `code='SUPER_ADMIN'` 或系统预置且受保护(`is_system=1 && is_protected=1`)。 - 超级管理员跳过菜单与权限过滤,拥有全部资源与操作能力。 ### 模型层 - `PermissionModel`:获取权限列表/详情、按角色/用户获取权限码;分配角色权限(事务)、缓存 `permissions:role:*`、`permission_codes:user:*`。 - `DataPermissionModel`:按角色/用户获取数据权限(部门ID集合),校验用户是否可访问某部门;生成数据权限 SQL 过滤条件。 - `MenuModel`:按用户返回菜单支持 `access_type` 过滤;非超级管理员补齐父级目录,保证导航完整;支持最小字段集与完整字段集。 ### 中间件 - `checkPermission(requiredPermissions, { checkDataPermission, dataPermissionType })` - `checkRole(requiredRoles)` - `checkPermissionLevel(minLevel)` - `checkDataPermission(permissionType)` ### 路由 - 权限管理:`GET /permissions`、`GET /permissions/:id`、`GET /roles/:roleId/permissions`、`PUT /roles/:roleId/permissions`、`GET /user/permissions` - 角色管理:`GET /roles`、`GET /roles/:id`、`POST /roles`(层级≥20)、`PUT /roles/:id`、`DELETE /roles/:id`、`GET/PUT /roles/:roleId/data-permissions` ### 权限码规范(示例) - 模块层:`module:{模块名}:{操作}`(如 `module:user:view`、`module:role:edit`) - 操作层:`{模块名}:{实体}:{操作}`(如 `system:user:create`、`system:role:delete`、`content:article:publish`) ## 🚀 快速开始 ### 环境要求 - **Node.js** >= 20.10.0 - **PNPM** >= 10.24.0 (项目使用 pnpm workspace 管理依赖) - **Docker** (可选,用于容器化部署) - **MySQL** >= 8.0 - **Redis** (可选,用于生产环境缓存) ⚠️ **重要**: - 请使用 `pnpm` 而不是 `npm` 或 `yarn` - 不要运行 `npm install` 或 `yarn install` - 只运行 `pnpm install` 安装依赖 ### 1. 克隆项目 ```bash git clone cd project-root ``` ### 2. 安装依赖 ```bash # 安装所有应用和依赖 pnpm install ``` ### 3. 开发环境启动 #### 并行启动前后端(推荐) ```bash # 启动所有开发服务(并行构建) pnpm dev # 或者分别启动 pnpm dev:frontend # 仅启动前端 pnpm dev:backend # 仅启动后端 ``` #### 单独启动服务 ```bash # 启动后端服务 cd apps/node-express-mysql pnpm dev # 启动前端服务 cd apps/react-antd-webpack pnpm dev ``` ### 4. 访问地址 - **前端应用**:http://localhost:8080 - **后端API**:http://localhost:8888 - **API文档**:http://localhost:8888/api-docs ### 5. 环境配置 #### 后端环境变量 ```bash # 复制环境变量模板 cp apps/node-express-mysql/.env.example apps/node-express-mysql/.env # 编辑配置文件 vim apps/node-express-mysql/.env ``` #### 前端API配置 ```bash # 前端会自动读取后端环境变量 # 默认连接:http://localhost:8888 # 如需修改,编辑 apps/react-antd-webpack/src/utils/api/request.js ``` ## 🛠️ 构建命令 ### Turbo 构建命令 ```bash # 构建所有应用 pnpm build # 构建前端 pnpm build:frontend # 构建后端(如果需要) pnpm build:backend # 清理构建缓存 pnpm clean # 代码检查 pnpm lint ``` ### 其他命令 ```bash # 运行测试 pnpm test # 停止所有服务 pnpm stop # 强制结束端口占用 pnpm kill:ports ``` ## API 接口文档 ### 认证相关 | 接口 | 方法 | 路径 | 功能 | 权限 | |------|------|------|------|------| | 用户登录 | POST | `/login` | 用户登录 | 公开 | | 用户登出 | POST | `/auth/logout` | 用户登出 | 需要token | | 强制登出用户 | POST | `/auth/logout/:userId` | 强制清退 | 需要token | | 强制登出会话 | POST | `/auth/logout/session/:sessionId` | 强制清退会话 | 需要token | | 刷新Token | PATCH | `/refresh` | 刷新访问令牌 | 需要refresh token | | 获取验证码 | POST | `/captcha` | 获取图形验证码 | 公开 | | 健康检查 | GET | `/health` | 系统健康检查 | 公开 | ### 用户管理 | 接口 | 方法 | 路径 | 功能 | 权限 | |------|------|------|------|------| | 获取用户列表 | GET | `/users` | 获取所有用户 | 需要token | | 获取用户信息 | GET | `/users/:id` | 获取指定用户 | 需要token | | 创建用户 | POST | `/users` | 创建新用户 | 需要token | | 更新用户 | PUT | `/users/:id` | 更新用户信息 | 需要token | | 删除用户 | DELETE | `/users/:id` | 删除用户 | 需要token | ### 角色管理 | 接口 | 方法 | 路径 | 功能 | 权限 | |------|------|------|------|------| | 获取角色列表 | GET | `/roles` | 获取所有角色 | 需要token | | 创建角色 | POST | `/roles` | 创建新角色 | 需要token | | 更新角色 | PUT | `/roles/:id` | 更新角色信息 | 需要token | | 删除角色 | DELETE | `/roles/:id` | 删除角色 | 需要token | | 绑定菜单 | POST | `/roles/bind-menus` | 角色绑定菜单 | 需要token | ### 菜单管理 | 接口 | 方法 | 路径 | 功能 | 权限 | |------|------|------|------|------| | 获取菜单列表 | GET | `/menus` | 获取所有菜单 | 需要token | | 创建菜单 | POST | `/menus` | 创建新菜单 | 需要token | | 更新菜单 | PUT | `/menus/:id` | 更新菜单信息 | 需要token | | 删除菜单 | DELETE | `/menus/:id` | 删除菜单 | 需要token | ### 审计日志与在线用户 | 接口 | 方法 | 路径 | 功能 | |------|------|------|------| | 审计列表 | GET | `/api/admin/audit/logs` | 审计日志分页查询 | | 审计详情 | GET | `/api/admin/audit/log/:id` | 审计日志详情 | | 在线用户 | GET | `/api/admin/audit/online/users` | 基于审计窗口聚合在线用户 | 返回字段:`user_id/username/dept_id/dept_name/last_active_time/actions_in_window/last_url/last_method/client_ip/user_agent/browser/operating_system/location/change_summary/session_id/session_last_active_time/session_duration_minutes`。 ### SSE 实时通知 | 接口 | 方法 | 路径 | 功能 | |------|------|------|------| | 认证连接 | GET | `/sse/connect/auth` | 建立 SSE 连接(需 Authorization) | | 发送消息 | POST | `/sse/send` | 向指定用户发送通知 | | 广播消息 | POST | `/sse/broadcast` | 向所有连接广播 | | 连接统计 | GET | `/sse/stats` | 查看连接统计 | 连接建议附带稳定 `clientId`:请求头 `X-Client-Id` 与 URL `?clientId=`。服务端在 `open/welcome` 事件返回 `{ connectionId, clientId }`。 ## 前端特性 ### 动态权限路由 - **动态路由注册** - 根据后端返回的菜单数据动态注册路由 - **权限控制** - 基于RBAC模型的页面级权限控制 - **按钮权限** - 支持按钮级别的权限控制 - **路由守卫** - 自动处理未授权访问和登录失效 ### 状态管理 - **Redux Toolkit** - 现代化的状态管理方案 - **持久化存储** - 用户信息和菜单数据本地缓存 - **无感刷新** - 自动处理Token过期和刷新 ### 错误处理 - **全局错误捕获** - ErrorBoundary + 全局错误监听 - **错误去重** - 防止重复错误上报 - **友好降级** - 错误页面自动跳转到有效页面 ### 性能优化 - **代码分割** - 路由级别的懒加载 - **资源优化** - 图片压缩和CDN支持 - **缓存策略** - 合理的缓存机制 ## 安全特性 ### 认证安全 - **JWT双Token** - Access Token + Refresh Token机制 - **Token过期** - 访问令牌1小时过期,刷新令牌7天过期 - **自动清理** - 定时清理过期和已撤销的token - **强制登出** - 支持强制登出用户所有设备 ### 输入验证 - **参数验证** - 所有接口都有完整的参数验证 - **格式检查** - 验证ID、邮箱、手机号等格式 - **重复性检查** - 防止创建重复的用户名、角色编码等 - **SQL注入防护** - 使用参数化查询防止SQL注入 ### 验证码保护 - **图形验证码** - 使用svg-captcha生成验证码 - **内存存储** - 验证码存储在服务器端内存中 - **过期机制** - 验证码5分钟自动过期 - **一次性使用** - 验证码使用后自动清除 ## 响应格式 ### 成功响应 ```json { "success": true, "code": 200, "message": "操作成功", "data": { "id": 1, "username": "admin", "name": "管理员" }, "timestamp": "2024-01-01T12:00:00.000Z" } ``` ### 错误响应 ```json { "success": false, "code": 400, "message": "请求参数错误", "data": null, "timestamp": "2024-01-01T12:00:00.000Z" } ``` ## 开发调试 ### 后端调试 ```bash # 查看验证码状态 curl -H "Authorization: Bearer " \ http://localhost:8888/captcha/status # 手动清理过期token curl -X POST -H "Authorization: Bearer " \ http://localhost:8888/cleanup-tokens # 获取token统计信息 curl -H "Authorization: Bearer " \ http://localhost:8888/token-stats ``` ### 前端调试 - **Redux DevTools** - 状态管理调试 - **React DevTools** - 组件调试 - **Network面板** - API请求调试 - **Console日志** - 错误信息查看 ## 🐳 Docker 部署 本项目支持完整的 Docker 容器化部署,提供自动化部署脚本和版本管理。 ### 快速部署(推荐) #### 1. 本地构建 ```bash # 构建生产版本 ./scripts/build-for-deploy.sh v1.0.0 ``` #### 2. 上传到服务器 ```bash # 上传构建产物到服务器 scp -r build-history/20251208/153826/* root@server:/opt/docker_project/backup/ ``` #### 3. 自动部署 ```bash # 登录服务器并执行部署 ssh root@server "cd /opt/docker_project && ./scripts/auto-deploy.sh deploy v1.0.0" ``` ### 部署功能特性 - ✅ **自动加载 Docker 镜像** - ✅ **前端版本管理**(语义化版本) - ✅ **Protect 目录同步**(SSL 证书等) - ✅ **备份和回滚机制** - ✅ **环境变量自动更新** - ✅ **软链接管理** ### 部署命令 ```bash # 部署指定版本 ./scripts/auto-deploy.sh deploy v1.0.0 # 回滚到指定版本 ./scripts/auto-deploy.sh rollback v1.0.0 # 查看部署状态 ./scripts/auto-deploy.sh status # 清理旧版本 ./scripts/auto-deploy.sh cleanup ``` ### 详细部署文档 - 📖 [部署文件清单.md](./doc/部署文件清单.md) - 完整的部署配置说明 - 📖 [手动部署指南.md](./doc/手动部署指南.md) - 手动部署步骤 - 📖 [Bash Shell脚本编写指南.md](./doc/Bash Shell脚本编写指南.md) - 脚本开发最佳实践 ### Docker 服务架构 本项目采用容器分离架构,各服务独立部署: ```bash # 容器分离架构 ├── Backend (Node.js后端) │ ├── 依赖 → MySQL (数据存储) │ └── 依赖 → Redis (缓存) │ ├── Frontend (系统级Nginx) │ ├── 提供 → 静态文件服务(版本管理) │ └── 代理 → Backend API请求 │ └── Infrastructure (基础设施) ├── MySQL (数据库) └── Redis (缓存) ``` ### 端口分配 | 服务 | 端口 | 说明 | |------|------|------| | Frontend (系统Nginx) | 80 | 前端静态文件服务 | | Backend (Node.js) | 8888 | 后端API服务 | | MySQL | 3306 | 数据库服务 | | Redis | 6379 | 缓存服务 | ## 📈 性能优化 ### 后端优化 - **数据库索引** - 为查询字段添加适当索引 - **连接池** - 使用数据库连接池 - **缓存策略** - Redis缓存热点数据 - **压缩中间件** - 启用gzip压缩 ### 前端优化 - **代码分割** - 路由级别的代码分割 - **懒加载** - 组件和路由懒加载 - **资源压缩** - 图片和静态资源压缩 - **CDN加速** - 静态资源CDN部署 ## 🤝 贡献指南 1. Fork 本仓库 2. 创建特性分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 打开 Pull Request ## 📄 许可证 本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情 ## 👨‍💻 作者 - **lyq** - *项目创建者和维护者* - [lyqjob@yeah.net](mailto:lyqjob@yeah.net) ## 🙏 致谢 ⭐ 如果这个项目对你有帮助,请给它一个星标!