|
@@ -1,17 +1,45 @@
|
|
|
-FROM node:18.12-alpine as build
|
|
|
+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 . .
|
|
|
-RUN mkdir -p /root/.local/share/pnpm/store/v3/files && chown -R $(whoami) /root/.local/share/pnpm/store/v3/
|
|
|
-RUN npm install -g pnpm && npm install -g typescript@5.1.6
|
|
|
-RUN echo "declare module 'lodash-es';" > types.d.ts
|
|
|
-RUN pnpm config set registry https://registry.npmmirror.com
|
|
|
-RUN pnpm update vue-demi@latest
|
|
|
-RUN pnpm install --fetch-timeout 60000
|
|
|
-RUN pnpm build
|
|
|
-
|
|
|
-FROM nginx:alpine as prod
|
|
|
-WORKDIR /app/kpt-system-web
|
|
|
-COPY --from=build /app/kpt-system-web/dist/ /usr/share/nginx/html/
|
|
|
+
|
|
|
+# 确保 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
|
|
|
+EXPOSE 80
|