diff --git a/backend/.npmrc b/backend/.npmrc index e1dddc9..94c5159 100644 --- a/backend/.npmrc +++ b/backend/.npmrc @@ -1,4 +1 @@ -onlyBuiltDependencies[]=@prisma/client -onlyBuiltDependencies[]=@prisma/engines -onlyBuiltDependencies[]=esbuild -onlyBuiltDependencies[]=prisma \ No newline at end of file +onlyBuiltDependencies=@prisma/client,@prisma/engines,esbuild,prisma \ No newline at end of file diff --git a/backend/Dockerfile b/backend/Dockerfile index 62da573..eaed165 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -1,13 +1,19 @@ - # Stage 1: 依赖安装 + 构建 FROM node:22-alpine AS builder WORKDIR /app -COPY package.json pnpm-lock.yaml .npmrc ./ -RUN corepack enable && pnpm install --allow-build=@prisma/client --allow-build=@prisma/engines --allow-build=esbuild --allow-build=prisma +# 允许所有包的 postinstall 脚本(Prisma/esbuild 需要) +ENV NPM_CONFIG_IGNORE_SCRIPTS=false -# Prisma 客户端生成 +# 复制依赖文件 +COPY package.json pnpm-lock.yaml ./ +COPY .npmrc ./ + +# 安装依赖(pnpm 会读取 .npmrc 中的 onlyBuiltDependencies) +RUN corepack enable && pnpm install --frozen-lockfile + +# 复制 Prisma schema 并生成客户端 COPY prisma/ ./prisma/ RUN npx prisma generate @@ -22,14 +28,12 @@ WORKDIR /app ENV NODE_ENV=production ENV NEXT_TELEMETRY_DISABLED=1 -# Standalone output 包含所有必要运行时文件 +# 复制 standalone 输出和静态资源 COPY --from=builder /app/.next/standalone ./ COPY --from=builder /app/.next/static ./.next/static COPY --from=builder /app/public ./public COPY --from=builder /app/prisma ./prisma -COPY --from=builder /app/node_modules/@prisma ./node_modules/@prisma -COPY --from=builder /app/node_modules/prisma ./node_modules/prisma EXPOSE 3000 -CMD ["node", "server.js"] \ No newline at end of file +CMD ["node", "server.js"]