43 lines
2.7 KiB
Markdown
43 lines
2.7 KiB
Markdown
---
|
|
kind: dependency_management
|
|
name: 基于 pnpm 与 Docker 的前后端依赖管理
|
|
category: dependency_management
|
|
scope:
|
|
- '**'
|
|
source_files:
|
|
- backend/package.json
|
|
- frontend/package.json
|
|
- backend/pnpm-lock.yaml
|
|
- frontend/pnpm-lock.yaml
|
|
- backend/Dockerfile
|
|
- frontend/Dockerfile
|
|
- frontend/pnpm-workspace.yaml
|
|
---
|
|
|
|
## 1. 核心系统与工具
|
|
该项目采用 **pnpm** 作为前后端统一的 JavaScript/TypeScript 包管理器,并通过 **Docker Compose** 进行容器化编排。项目明确指定了 `packageManager` 字段(`pnpm@11.5.2`),利用 Corepack 机制确保开发环境与生产环境使用完全一致的包管理版本。
|
|
|
|
- **包管理器**: pnpm (v11.5.2)
|
|
- **锁定文件**: `pnpm-lock.yaml`
|
|
- **运行时**: Node.js (Backend: v22-alpine, Frontend Builder: v18-alpine)
|
|
- **部署编排**: Docker Compose
|
|
|
|
## 2. 关键文件与配置
|
|
- **`backend/package.json` / `frontend/package.json`**: 分别定义了后端 API 和前端 Vue 应用的依赖清单。后端依赖包括 `express`, `sequelize`, `mysql2`, `ioredis` 等;前端依赖包括 `vue`, `element-plus`, `axios` 等。
|
|
- **`pnpm-lock.yaml`**: 存在于 `backend/` 和 `frontend/` 目录下,用于精确锁定依赖树,确保构建的可重复性。
|
|
- **`frontend/pnpm-workspace.yaml`**: 虽然目前仅包含 `allowBuilds` 配置,但表明前端目录具备向 pnpm Workspace 演进的潜力或已预留相关配置入口。
|
|
- **`Dockerfile`**:
|
|
- 后端:通过 `corepack enable pnpm` 启用 pnpm,并使用 `--frozen-lockfile` 参数安装生产依赖。
|
|
- 前端:采用多阶段构建,在 `builder` 阶段安装依赖并打包,最终产物由 `nginx:alpine` 托管。
|
|
|
|
## 3. 架构与约定
|
|
- **依赖隔离**: 前后端拥有独立的 `node_modules` 和锁定文件,互不干扰。
|
|
- **生产环境优化**:
|
|
- 后端 Docker 镜像仅安装 `dependencies` (`--prod`),排除 `devDependencies`(如 `nodemon`),减小镜像体积。
|
|
- 前端通过多阶段构建,最终镜像不包含 `node_modules` 或构建工具,仅保留静态资源。
|
|
- **版本一致性**: 通过在 `package.json` 中声明 `packageManager` 字段,配合 CI/CD 或本地开发时的 Corepack 支持,强制统一工具链版本。
|
|
|
|
## 4. 开发者规范
|
|
- **安装依赖**: 必须使用 `pnpm install`,禁止使用 `npm install` 或 `yarn`,以避免锁定文件冲突。
|
|
- **更新依赖**: 修改 `package.json` 后,需重新运行 `pnpm install` 并同步提交更新后的 `pnpm-lock.yaml`。
|
|
- **容器化构建**: 生产环境部署应优先使用 `docker-compose up --build`,确保依赖安装过程遵循 Dockerfile 中定义的 `--frozen-lockfile` 约束,防止意外引入未锁定的新版本。 |