FROM node:18-slim AS build # 设置工作目录和环境变量 WORKDIR /app/kpt-system-web ENV NODE_OPTIONS="--max-old-space-size=4096" ENV PNPM_HOME=/usr/local/bin ENV VITE_USER_NODE_ENV=production # 安装系统依赖(改用 slim 镜像避免 Alpine 兼容性问题) RUN apt-get update && \ apt-get install -y git python3 make g++ jq && \ rm -rf /var/lib/apt/lists/* # 使用 Corepack 管理 PNPM RUN corepack enable && \ corepack prepare pnpm@latest --activate # 复制包管理文件(利用缓存层) COPY package.json pnpm-lock.yaml .npmrc ./ COPY patches ./patches # 关键步骤:替换问题插件并更新核心依赖 RUN pnpm install --shamefully-hoist && \ pnpm remove vite-plugin-mock && \ pnpm add mockjs vite-plugin-mock@latest -D && \ pnpm update vite @antfu/install-pkg @iconify/utils --latest # 复制剩余文件 COPY . . # 确保 ESM 配置 RUN echo '{"type": "module"}' > package.json.tmp && \ jq -s '.[0] * .[1]' package.json package.json.tmp > package.json.new && \ mv package.json.new package.json && \ rm package.json.tmp && \ echo "declare module 'lodash-es';" > types.d.ts # 构建 RUN pnpm build # 生产阶段 FROM nginx:alpine AS prod COPY --from=build /app/kpt-system-web/dist /usr/share/nginx/html COPY --from=build /app/kpt-system-web/nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 80