|
@@ -1,17 +1,42 @@
|
|
|
-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"
|
|
|
-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
|
|
|
+ENV PNPM_HOME=/usr/local/bin
|
|
|
+ENV VITE_USER_NODE_ENV=production
|
|
|
|
|
|
-FROM nginx:alpine as prod
|
|
|
-WORKDIR /app/kpt-system-web
|
|
|
-COPY --from=build /app/kpt-system-web/dist/ /usr/share/nginx/html/
|
|
|
+# 安装系统依赖(改用 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
|
|
|
+EXPOSE 80
|