# 前端:Node 22 构建 + Nginx;与 .env.production 中 VITE_API_URL=/prod-api 配套 # 构建:在仓库根目录执行 # docker build -f docker/Dockerfile.web -t aidop-web:latest . # # ★ 优化要点:先拷 package*.json 做 install,再拷源码做 build。 # 这样只改 .vue/.ts 时 install 层走缓存,构建从 ~4min 降到 ~40s。 FROM node:22-bookworm-slim AS build WORKDIR /web # ── 第一步:只拷依赖声明 → install(此层只在依赖变更时失效) ── COPY Web/package.json Web/package-lock.json ./ # 去掉 prepare(git hooks),保留 @vue-office/* 等依赖的 postinstall RUN node -e "\ const fs = require('fs');\ const p = JSON.parse(fs.readFileSync('package.json', 'utf8'));\ delete p.scripts.prepare;\ fs.writeFileSync('package.json', JSON.stringify(p, null, '\t'));\ " RUN npm config set registry https://registry.npmmirror.com && \ npm install --legacy-peer-deps # ── 第二步:拷全部源码 → build(只有这层在改代码时重建) ── COPY Web/ . RUN npm run build # ── 运行阶段 ── FROM nginx:1.27-alpine AS final COPY docker/nginx/ssl/default.crt /etc/nginx/ssl/default.crt COPY docker/nginx/ssl/default.key /etc/nginx/ssl/default.key COPY docker/nginx/default.conf /etc/nginx/conf.d/default.conf COPY --from=build /web/dist /usr/share/nginx/html EXPOSE 80 443