Dockerfile 1.3 KB

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