Files
dashboard/.qoder/repowiki/knowledge/zh/pnpm 多包工作区与镜像源管理/pnpm 多包工作区与镜像源管理.md
T

41 lines
3.4 KiB
Markdown
Raw Normal View History

2026-07-16 16:34:18 +08:00
---
kind: dependency_management
name: pnpm 多包工作区与镜像源管理
category: dependency_management
scope:
- '**'
source_files:
- backend/package.json
- frontend/package.json
- frontend_v2/package.json
- frontend_v2/pnpm-workspace.yaml
- frontend_v2/.npmrc
---
## 1. 使用的系统/工具链
- **包管理器**:统一使用 pnpm(v11),通过 `packageManager` 字段锁定版本,确保团队一致。
- **锁文件策略**:后端 `backend/` 提交 `pnpm-lock.yaml`;前端 `frontend/` 同时存在 `pnpm-lock.yaml``package-lock.json`(后者为历史遗留);`frontend_v2/` 仅提交 `pnpm-lock.yaml`
- **私有仓库/镜像**`frontend_v2/.npmrc` 配置淘宝镜像 `https://registry.npmmirror.com/``frontend/` 未显式配置 `.npmrc`,默认走官方源。
- **无 vendor 目录**:三个子项目均未将 `node_modules` 或第三方源码纳入版本控制,依赖通过安装生成。
## 2. 关键文件与包
- `backend/package.json` — 后端 API 依赖声明(Express、Sequelize、MySQL2、JWT、Axios、Zod、AWS S3 SDK、Winston、ioredis 等)。
- `frontend/package.json` — 旧版前端(Vue 3 + Element Plus + Vite)依赖。
- `frontend_v2/package.json` — 新版前端模板(Soybean Admin,基于 Vue 3 + Naive UI + UnoCSS + TypeScript)。
- `frontend_v2/pnpm-workspace.yaml` — 定义 Monorepo 工作区,包含 `packages/*` 下的内部包(@sa/axios@sa/color@sa/hooks@sa/materials@sa/utils@sa/scripts@sa/uno-preset)。
- `frontend_v2/.npmrc` — 指定 npm 镜像源。
- 各子项目 `.gitignore` 均忽略 `node_modules/``dist/``.env*` 等。
## 3. 架构与约定
- **Monorepo 结构**`frontend_v2/` 采用 pnpm workspace,根 `package.json` 作为聚合入口,业务代码在 `src/`,可复用能力下沉到 `packages/` 下以 `workspace:*` 协议引用。
- **版本范围策略**`backend/``frontend/` 的依赖普遍使用 `^major.minor` 宽泛范围,便于自动升级;`frontend_v2/` 则对核心依赖使用精确版本号(如 `vue: 3.5.34``naive-ui: 2.44.1`),配合 `simple-git-hooks``update-pkg` 脚本统一管理更新。
- **Node 引擎约束**`frontend_v2/` 通过 `engines` 强制 Node ≥ 20.19.0、pnpm ≥ 10.5.0,避免环境差异导致的依赖解析问题。
- **构建期依赖隔离**`frontend_v2/pnpm-workspace.yaml``allowBuilds` 明确禁止 esbuild、@parcel/watcher 等构建工具在工作区内被提升,减少重复安装。
## 4. 开发者应遵循的规则
1. **统一使用 pnpm**:新增依赖一律通过 `pnpm add [-D] <pkg>` 操作,不要手动编辑 `package.json` 后自行安装。
2. **不提交 node_modules**:所有子项目的 `.gitignore` 已忽略 `node_modules/`,请勿将其纳入版本控制。
3. **镜像源一致性**:新成员应在本地 `.npmrc` 中配置 `registry=https://registry.npmmirror.com/`,与 `frontend_v2/` 保持一致,避免下载缓慢或失败。
4. **Monorepo 内共享包**:如需在 `frontend_v2/packages/` 间共享代码,使用 `workspace:*` 协议并在 `pnpm-workspace.yaml``packages` 列表中添加路径。
5. **依赖版本策略**:公共库建议固定主版本(`^x.y.z`),框架核心依赖参考 `frontend_v2/` 的精确版本写法以保持稳定性。
6. **更新流程**:优先使用 `pnpm update``pnpm sa update-pkg`(在 `frontend_v2/` 中)进行批量升级,并检查 `pnpm-lock.yaml` 变更后再提交。