chore(deps): 统一依赖管理 - pnpm 11 + node:22 + golang:1.25 + python:3.12 + shared-* 集中化
- Node.js 统一到 node:22-alpine,Go 统一到 golang:1.25-alpine,Python 统一到 python:3.12-slim - pnpm 升级到 11.13.0(corepack),新增 allowBuilds 白名单解决 ERR_PNPM_IGNORED_BUILDS - 新增 packages/shared-py 集中 Python 共享依赖,shared-ts 补充 graphql-yoga/prom-client - api-gateway 修复 go.mod 的 shared-go 依赖 + Dockerfile 改用 repo 根作 context - Python 服务(data-ana/ai)Dockerfile 改用 repo 根作 context + 声明 uv workspace sources - 16 个服务的 Dockerfile + CI + docker-compose.tools.yml 全部对齐版本矩阵 - known-issues.md 沉淀 9 条 pnpm 11 / uv workspace / Go shared-go 迁移经验 - 验证:4 服务完全成功(api-gateway /healthz 200),其余 install 成功(build 失败为预存 TS 错误)
This commit is contained in:
@@ -5,7 +5,7 @@ FROM node:22-alpine AS builder
|
||||
WORKDIR /app
|
||||
|
||||
# 安装 pnpm
|
||||
RUN corepack enable && corepack prepare pnpm@latest --activate
|
||||
RUN corepack enable && corepack prepare pnpm@11.13.0 --activate
|
||||
|
||||
# 复制 workspace 配置
|
||||
COPY pnpm-workspace.yaml pnpm-lock.yaml package.json tsconfig.base.json ./
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
# 端口:4002(4 端 portal 强制 4000-4003)
|
||||
|
||||
# ============ Builder ============
|
||||
FROM node:20-alpine AS builder
|
||||
FROM node:22-alpine AS builder
|
||||
WORKDIR /app
|
||||
|
||||
# 启用 pnpm
|
||||
RUN corepack enable && corepack prepare pnpm@9.12.0 --activate
|
||||
RUN corepack enable && corepack prepare pnpm@11.13.0 --activate
|
||||
|
||||
# 先拷依赖清单,利用缓存
|
||||
COPY package.json pnpm-lock.yaml* pnpm-workspace.yaml* ./
|
||||
@@ -25,7 +25,7 @@ ENV NEXT_TELEMETRY_DISABLED=1
|
||||
RUN pnpm --filter @edu/parent-portal run build
|
||||
|
||||
# ============ Runtime ============
|
||||
FROM node:20-alpine AS runner
|
||||
FROM node:22-alpine AS runner
|
||||
WORKDIR /app
|
||||
|
||||
ENV NODE_ENV=production
|
||||
|
||||
@@ -20,20 +20,20 @@ parent-portal 自身经验证仍完全就绪:Docker 镜像构建成功(stand
|
||||
|
||||
## 2. 核查结果对照表
|
||||
|
||||
| 项目 | v1 状态 | v2 核查 | 说明 |
|
||||
| -------------------------------- | -------------- | ----------------------- | ---------------------------------------------------------------------------------------------------- |
|
||||
| parent-portal Docker 镜像 | ✅ 已就绪 | ✅ 仍就绪 | `edu-parent-portal:test`,standalone 模式,25 路由,容器 healthy |
|
||||
| parent-portal 容器健康检查 | ✅ 通过 | ✅ 仍通过 | `/api/health` 200,`/login` 200,容器状态 healthy |
|
||||
| Mock 数据 | ✅ 已禁用 | ✅ 仍禁用 | `NEXT_PUBLIC_API_MOCKING=disabled` |
|
||||
| GraphQL 端点配置 | ✅ 已配置 | ✅ 仍配置 | `NEXT_PUBLIC_GRAPHQL_ENDPOINT=/api/v1/parent/v1/graphql` |
|
||||
| parent-bff pnpm-lock.yaml | ❌ 缺失 | ✅ **已完成** | 241KB,可被 Docker 使用 |
|
||||
| parent-bff 端点路径 | ❌ 错配 | ❌ **仍未修复** | controller 仍为 `/graphql`,应为 `/v1/parent/v1/graphql` |
|
||||
| parent-bff GraphQL schema | ❌ 未扩充 | ❌ **仍未扩充** | 仍为 10Q+3M,前端需 32Q+6M |
|
||||
| parent-bff extended-resolvers.ts | — | ❌ **未集成(新发现)** | 文件存在(990+ 行)但未被 `resolvers/index.ts` 导入,且引用 27+ 个 types.ts 中不存在的类型 |
|
||||
| parent-bff Docker 构建 | ❌ 缺 lockfile | ❌ **新失败原因** | pnpm 11.x `ERR_PNPM_IGNORED_BUILDS`(Dockerfile 用 `npm install -g pnpm` 安装最新版而非固定 9.12.0) |
|
||||
| api-gateway Docker 构建 | ❌ 缺基础镜像 | ❌ **仍失败** | `golang:1.22-alpine` 无法拉取(docker.io 被墙),本地仅有 `golang:1.25-alpine` |
|
||||
| iam.GetChildrenByParent | ✅ 已就绪 | ✅ 仍就绪 | gRPC + HTTP 均已实现 |
|
||||
| push-gateway /ws | ✅ 已就绪 | ✅ 仍就绪 | 完整 WebSocket 实现 |
|
||||
| 项目 | v1 状态 | v2 核查 | 说明 |
|
||||
| -------------------------------- | -------------- | ----------------------- | ----------------------------------------------------------------------------------------------------------------- |
|
||||
| parent-portal Docker 镜像 | ✅ 已就绪 | ✅ 仍就绪 | `edu-parent-portal:test`,standalone 模式,25 路由,容器 healthy |
|
||||
| parent-portal 容器健康检查 | ✅ 通过 | ✅ 仍通过 | `/api/health` 200,`/login` 200,容器状态 healthy |
|
||||
| Mock 数据 | ✅ 已禁用 | ✅ 仍禁用 | `NEXT_PUBLIC_API_MOCKING=disabled` |
|
||||
| GraphQL 端点配置 | ✅ 已配置 | ✅ 仍配置 | `NEXT_PUBLIC_GRAPHQL_ENDPOINT=/api/v1/parent/v1/graphql` |
|
||||
| parent-bff pnpm-lock.yaml | ❌ 缺失 | ✅ **已完成** | 241KB,可被 Docker 使用 |
|
||||
| parent-bff 端点路径 | ❌ 错配 | ❌ **仍未修复** | controller 仍为 `/graphql`,应为 `/v1/parent/v1/graphql` |
|
||||
| parent-bff GraphQL schema | ❌ 未扩充 | ❌ **仍未扩充** | 仍为 10Q+3M,前端需 32Q+6M |
|
||||
| parent-bff extended-resolvers.ts | — | ❌ **未集成(新发现)** | 文件存在(990+ 行)但未被 `resolvers/index.ts` 导入,且引用 27+ 个 types.ts 中不存在的类型 |
|
||||
| parent-bff Docker 构建 | ❌ 缺 lockfile | ✅ **依赖统一已修复** | pnpm@11.13.0 + `--ignore-scripts` 解决 `ERR_PNPM_IGNORED_BUILDS`(build 仍失败为预存 TS 错误) |
|
||||
| api-gateway Docker 构建 | ❌ 缺基础镜像 | ✅ **依赖统一已修复** | 升级 `golang:1.25-alpine` + 修复 go.mod shared-go 依赖 + Dockerfile 用 repo 根作 context,构建成功 + /healthz 200 |
|
||||
| iam.GetChildrenByParent | ✅ 已就绪 | ✅ 仍就绪 | gRPC + HTTP 均已实现 |
|
||||
| push-gateway /ws | ✅ 已就绪 | ✅ 仍就绪 | 完整 WebSocket 实现 |
|
||||
|
||||
---
|
||||
|
||||
@@ -55,26 +55,16 @@ parent-portal 自身经验证仍完全就绪:Docker 镜像构建成功(stand
|
||||
| `services/parent-bff/src/graphql/yoga.ts:77` | `graphqlEndpoint: "/graphql"` | `graphqlEndpoint: "/v1/parent/v1/graphql"` |
|
||||
| `services/parent-bff/src/graphql/graphql.module.ts:66` | `forRoutes("graphql")` | `forRoutes("v1/parent/v1/graphql")` |
|
||||
|
||||
### 3.2 parent-bff Docker 构建失败(新发现:pnpm 版本问题)
|
||||
### 3.2 parent-bff Docker 构建失败(✅ 依赖统一已修复)
|
||||
|
||||
**核查证据**(Docker 构建日志):
|
||||
> **2026-07-14 更新**:统一依赖管理迁移已解决此问题。Dockerfile 升级为 `corepack pnpm@11.13.0` + `--ignore-scripts`,`pnpm install --frozen-lockfile` 成功。`pnpm build` 仍失败为预存 TS 错误(extended-resolvers.ts 49 个类型错误),与依赖管理无关。
|
||||
|
||||
**历史记录**(已过时):
|
||||
|
||||
```
|
||||
#10 19.19 [ERR_PNPM_IGNORED_BUILDS] Ignored build scripts: @nestjs/core@10.4.22, protobufjs@7.6.5
|
||||
```
|
||||
|
||||
**原因**:`services/parent-bff/Dockerfile` 第 4 行 `RUN npm install -g pnpm` 安装最新版 pnpm(11.x),而 lockfile 是用 pnpm 9.x 生成。pnpm 11.x 引入 `ERR_PNPM_IGNORED_BUILDS` 错误,导致 `--frozen-lockfile` 失败。
|
||||
|
||||
**修复方案**:将 Dockerfile 第 4 行和第 14 行改为固定 pnpm 版本:
|
||||
|
||||
```dockerfile
|
||||
# 修复前
|
||||
RUN npm install -g pnpm
|
||||
|
||||
# 修复后
|
||||
RUN npm install -g pnpm@9.12.0
|
||||
```
|
||||
|
||||
### 3.3 parent-bff GraphQL Schema 未扩充 + extended-resolvers 未集成(新发现)
|
||||
|
||||
**核查证据**:
|
||||
|
||||
@@ -7,7 +7,7 @@ FROM node:22-alpine AS builder
|
||||
WORKDIR /app
|
||||
|
||||
# 启用 pnpm
|
||||
RUN corepack enable && corepack prepare pnpm@9.12.0 --activate
|
||||
RUN corepack enable && corepack prepare pnpm@11.13.0 --activate
|
||||
|
||||
# 构建参数:控制 MSW mock 是否启用(生产构建默认 disabled)
|
||||
# --build-arg NEXT_PUBLIC_API_MOCKING=disabled
|
||||
|
||||
@@ -3,11 +3,11 @@
|
||||
# 端口规范:teacher-portal :4000(matrix.md §1 微前端层)
|
||||
|
||||
# ============ Builder ============
|
||||
FROM node:20-alpine AS builder
|
||||
FROM node:22-alpine AS builder
|
||||
WORKDIR /app
|
||||
|
||||
# 启用 pnpm
|
||||
RUN corepack enable && corepack prepare pnpm@9.12.0 --activate
|
||||
RUN corepack enable && corepack prepare pnpm@11.13.0 --activate
|
||||
|
||||
# 先拷依赖清单,利用缓存(含 workspace 共享包)
|
||||
COPY package.json pnpm-lock.yaml* pnpm-workspace.yaml* tsconfig.base.json* ./
|
||||
@@ -29,7 +29,7 @@ ENV NEXT_TELEMETRY_DISABLED=1
|
||||
RUN pnpm --filter @edu/teacher-portal run build
|
||||
|
||||
# ============ Runtime ============
|
||||
FROM node:20-alpine AS runner
|
||||
FROM node:22-alpine AS runner
|
||||
WORKDIR /app
|
||||
|
||||
ENV NODE_ENV=production
|
||||
|
||||
Reference in New Issue
Block a user