33 lines
1.2 KiB
Docker
33 lines
1.2 KiB
Docker
# 构建 Vue 静态文件
|
|
FROM node:22-alpine AS build
|
|
|
|
WORKDIR /app
|
|
|
|
# Corepack 与 pnpm 依赖均通过 npmmirror 下载,避免构建时访问 npm 官方源过慢。
|
|
ENV COREPACK_NPM_REGISTRY=https://registry.npmmirror.com
|
|
ENV NPM_CONFIG_REGISTRY=https://registry.npmmirror.com
|
|
RUN corepack enable
|
|
|
|
COPY package.json pnpm-lock.yaml ./
|
|
COPY shared/package.json ./shared/package.json
|
|
# package.json 和 lock 文件未变化时,这一层会由 Docker 自动复用,
|
|
# 因此不会重复下载 pnpm 依赖。
|
|
RUN pnpm config set registry https://registry.npmmirror.com && \
|
|
pnpm install --frozen-lockfile
|
|
|
|
COPY . .
|
|
ARG VITE_CLIENT_WEB_URL
|
|
ENV VITE_CLIENT_WEB_URL=${VITE_CLIENT_WEB_URL}
|
|
# Docker 构建时同机还会运行多项服务,限制 Vitest 并发以避免测试超时。
|
|
# pnpm 会直接把脚本名后的参数传给 Vitest;额外的 `--` 会让 Vitest
|
|
# 把 maxWorkers 当作位置参数,导致并发限制不生效。
|
|
RUN pnpm build
|
|
|
|
# 运行阶段:仅保留构建产物和 Nginx,不包含源码或 node_modules。
|
|
FROM nginx:1.27-alpine
|
|
|
|
COPY nginx/default.conf.template /etc/nginx/templates/default.conf.template
|
|
COPY --from=build /app/dist /usr/share/nginx/html
|
|
|
|
EXPOSE 80
|