31 lines
1019 B
Docker
31 lines
1019 B
Docker
# ---------- 第一阶段:构建 ----------
|
||
FROM node:20-alpine AS build
|
||
WORKDIR /app
|
||
|
||
# 构建阶段必须是开发环境,否则 npm 会跳过 devDependencies(tsc/vite 缺失 → 127)
|
||
ENV NODE_ENV=development
|
||
|
||
# 先只拷贝依赖清单,利用 Docker 层缓存加速重复构建
|
||
COPY package.json package-lock.json* ./
|
||
|
||
# 国内网络环境可取消下一行注释使用镜像源
|
||
# RUN npm config set registry https://registry.npmmirror.com
|
||
RUN npm ci --include=dev
|
||
|
||
# 依赖自检:如果 tsc/vite 没装上,在这里就明确失败而不是 127
|
||
RUN ./node_modules/.bin/tsc --version && ./node_modules/.bin/vite --version
|
||
|
||
# 拷贝源码并构建(产物输出到 /app/dist)
|
||
COPY . .
|
||
RUN npm run build
|
||
|
||
# ---------- 第二阶段:运行 ----------
|
||
FROM nginx:1.27-alpine
|
||
# 单页应用 Nginx 配置(SPA 回退 + 静态资源缓存)
|
||
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
||
# 拷贝构建产物
|
||
COPY --from=build /app/dist /usr/share/nginx/html
|
||
|
||
EXPOSE 80
|
||
CMD ["nginx", "-g", "daemon off;"]
|