123456789101112131415161718192021222324252627282930313233343536373839404142 |
- 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 add \
- vite@4.5.14 \
- vite-plugin-mock@2.9.8 \
- mockjs@1.1.0 \
- @antfu/install-pkg@0.1.1 \
- @iconify/utils@1.2.2 -D && \
- # 强制锁定模块系统
- jq '. + {"type": "commonjs"}' package.json > package.json.tmp && \
- mv package.json.tmp package.json && \
- # 清理缓存
- rm -rf node_modules .pnpm-store && \
- pnpm install --frozen-lockfile --ignore-scripts && \
- 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
|