# 使用 Node 镜像构建 Vue 项目 FROM node:20-alpine AS build-stage # 设置工作目录 WORKDIR /app # 复制项目文件 COPY . . RUN npm install -g pnpm RUN pnpm config set registry https://registry.npmmirror.com RUN cd ${WORKDIR} # ----------------------------------------------------------------- # 【核弹级修复】 # 既然本地和线上不一致,我们直接在 Docker 里“销毁”旧锁文件! # 这样 pnpm install 就会被迫重新读取 package.json。 # 因为我们在 package.json 里写了 overrides: "2.4.2", # 所以它这次一定会乖乖下载 2.4.2,绝对不会再去下 2.6.1 了。 # ----------------------------------------------------------------- RUN rm -f pnpm-lock.yaml # 重新安装依赖(不使用锁文件,完全依赖 package.json 的 overrides) RUN pnpm install # 构建生产环境静态文件 RUN pnpm run build-web RUN pnpm run build-backend-html # 使用 Nginx 镜像作为运行时 FROM nginx:alpine # 复制 Nginx 配置文件 COPY nginx/nginx.conf /etc/nginx/conf.d/default.conf # 从构建阶段复制静态文件到 Nginx 的默认静态文件目录 COPY --from=build-stage /app/packages/web/dist /usr/share/nginx/html COPY --from=build-stage /app/packages/frontend/dist /usr/share/nginx/html/admin # 暴露 80 端口 EXPOSE 80 # 启动 Nginx CMD ["nginx", "-g", "daemon off;"]