# Monorepo 架构文档 ## 概述 本项目采用 pnpm workspaces 实现 Monorepo 架构,统一管理多个应用、模块和共享包。 ## 技术选型 | 技术 | 版本 | 用途 | |------|------|------| | pnpm | 10.18.3 | 包管理和工作空间 | | Turbo | - | 构建编排和缓存 | | TypeScript | 5.9.3 | 类型安全 | | Vite | 7.x | 构建工具 | ## 工作空间配置 ### pnpm-workspace.yaml ```yaml packages: - 'mini' # 员工小程序 - 'mini-talent' # 人才小程序 - 'web' # 管理后台 - 'packages/*' # 核心包 (61个) - 'allin-packages/*' # 业务模块包 (15个) - 'mini-ui-packages/*' # 小程序UI包 (18个) ``` ## 包分类架构 ``` ┌─────────────────────────────────────────────────────────────┐ │ 188-179 Monorepo │ ├─────────────────────────────────────────────────────────────┤ │ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ 应用层 │ │ 应用层 │ │ 应用层 │ │ │ ├──────────────┤ ├──────────────┤ ├──────────────┤ │ │ │ web/ │ │ mini/ │ │ mini-talent/│ │ │ │ 管理后台 │ │ 员工小程序 │ │ 人才小程序 │ │ │ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │ │ │ │ │ │ │ └─────────────────┼─────────────────┘ │ │ │ │ │ ┌────────────────────────▼─────────────────────────────┐ │ │ │ 模块层 │ │ │ ├─────────────────────────────────────────────────────┤ │ │ │ packages/ allin-packages/ │ │ │ │ ├── core-module ├── channel-module │ │ │ │ ├── auth-module ├── company-module │ │ │ │ ├── user-module ├── disability-module │ │ │ │ ├── orders-module ├── order-module │ │ │ │ ├── goods-module ├── platform-module │ │ │ │ ├── merchant-module ├── salary-module │ │ │ │ └── ... └── statistics-module │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ │ ┌────────────────────────▼─────────────────────────────┐ │ │ │ 共享层 │ │ │ ├─────────────────────────────────────────────────────┤ │ │ │ mini-ui-packages/ packages/ 共享 │ │ │ │ ├── mini-charts ├── shared-types │ │ │ │ ├── mini-shared-ui ├── shared-utils │ │ │ │ ├── yongren-* ├── shared-crud │ │ │ │ ├── rencai-* ├── shared-ui-components │ │ │ │ └── allin-enums └── ... │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ## 依赖关系 ### 应用依赖 ``` web/ → packages/core-module, packages/shared-ui-components mini/ → mini-ui-packages/yongren-*, packages/core-module mini-talent/ → mini-ui-packages/rencai-*, packages/core-module ``` ### 模块依赖 ``` *-module → packages/core-module, packages/shared-types *-management-ui → packages/shared-ui-components, packages/*-module ``` ### 共享依赖 ``` 所有包 → packages/shared-types, packages/shared-utils ``` ## 包命名规范 ### 后端模块包 - 格式: `<业务领域>-module` - 示例: `auth-module`, `orders-module`, `goods-module` - 多租户变体: `<业务领域>-module-mt` ### UI管理包 - 格式: `<业务领域>-management-ui` - 示例: `user-management-ui`, `order-management-ui` ### 小程序UI包 - 通用组件: `mini-*` - 员工端: `yongren-*` - 人才端: `rencai-*` ### 共享包 - 格式: `shared-*` - 示例: `shared-types`, `shared-utils`, `shared-crud` ## 构建策略 ### 并行构建 ```bash # 使用Turbo并行构建所有包 pnpm build # 按类别并行构建 pnpm run build:mini-ui-packages pnpm run build:mini-ui-packages:common pnpm run build:mini-ui-packages:yongren pnpm run build:mini-ui-packages:rencai ``` ### 构建顺序 1. **共享包优先**: shared-types → shared-utils → shared-crud 2. **核心模块**: core-module, auth-module 3. **业务模块**: 依赖核心模块的业务包 4. **UI包**: 依赖业务模块的UI组件 5. **应用**: web, mini, mini-talent ## 开发工作流 ### 添加新包 1. 在对应目录创建包文件夹 2. 初始化 `package.json` 3. 更新工作空间依赖 4. 添加构建脚本 ### 包间依赖 ```json { "name": "order-management-ui", "dependencies": { "@d8d/orders-module": "workspace:*", "@d8d/shared-ui-components": "workspace:*", "@d8d/shared-types": "workspace:*" } } ``` ## 多租户支持 部分模块支持多租户架构,具有独立的 `-mt` 变体: | 单租户版本 | 多租户版本 | |-----------|-----------| | auth-module | auth-module-mt | | goods-module | goods-module-mt | | orders-module | orders-module-mt | | user-module | user-module-mt | 多租户版本包含额外的租户隔离逻辑和数据过滤。 ## 性能优化 ### Turbo 缓存 - 构建缓存位于 `.turbo/` 目录 - 未变更的包使用缓存,加快构建速度 ### 并行执行 - 使用 `--workspace-concurrency` 控制并行度 - 默认使用CPU核心数 ## 故障排查 ### 依赖问题 ```bash # 重新安装依赖 rm -rf node_modules .pnpm-store pnpm install ``` ### 构建缓存清理 ```bash # 清除Turbo缓存 rm -rf .turbo # 重新构建 pnpm build ``` ### 包链接问题 ```bash # 检查包依赖关系 pnpm list --depth 0 ``` ## 相关文档 - [模块组织结构](./module-structure.md) - [开发规范](../standards/coding-standards.md)