mirror of
https://github.com/JefferyHcool/BiliNote.git
synced 2026-05-12 02:20:18 +08:00
ghcr.io 镜像推送在 v2.1.1 tag 上失败,停在 frontend-builder 第 7/7 步
'pnpm run build':vite loadConfigFromBundledFile 1.5s 内挂掉,没具体行号——
典型现象是 vite.config.ts 顶部 import 的某个 plugin(@tailwindcss/vite)的
native binding 在容器里 require 失败。
三处修复:
1. Dockerfile.complete + BillNote_frontend/Dockerfile:node:18-alpine → node:20-alpine
· Tailwind v4 已不再支持 Node 18(package 现实需要 20+)
· Vite 6 也建议 Node 20+
2. Dockerfile.complete 的 frontend 阶段:复制 pnpm-lock.yaml + 改用 --frozen-lockfile
· 之前没传 lockfile,每次 pnpm install 重解析 semver,有可能拉到比本地更新的 native dep
3. BillNote_frontend/pnpm-lock.yaml 强制入库(git add -f)
· 之前根 .gitignore 有条诡异的 'BiliNote/pnpm-lock.yaml'(拼错的路径),
虽然没真匹配上这个文件,但 lockfile 历史上一直没被提交,导致 CI 与本地依赖图持续漂移
· lockfile 里 @tailwindcss/oxide 同时锁了 musl 与 gnu 变体,alpine 跑没问题
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
25 lines
741 B
Docker
25 lines
741 B
Docker
# === 前端构建阶段 ===
|
||
# Tailwind v4 / Vite 6 需要 Node 20+,alpine + pnpm 会按 lockfile 拉 musl native binary。
|
||
FROM node:20-alpine AS builder
|
||
|
||
RUN corepack enable && corepack prepare pnpm@latest --activate
|
||
|
||
WORKDIR /app
|
||
|
||
# 先复制 lockfile 利用依赖层缓存
|
||
COPY ./BillNote_frontend/package.json ./BillNote_frontend/pnpm-lock.yaml ./
|
||
RUN pnpm install --frozen-lockfile
|
||
|
||
# 再复制源代码并构建
|
||
COPY ./BillNote_frontend/ ./
|
||
RUN pnpm run build
|
||
|
||
# --- 阶段2:使用 nginx 作为静态服务器 ---
|
||
FROM nginx:1.25-alpine
|
||
|
||
RUN rm -rf /etc/nginx/conf.d/default.conf
|
||
COPY ./BillNote_frontend/deploy/default.conf /etc/nginx/conf.d/default.conf
|
||
|
||
# 拷贝构建产物
|
||
COPY --from=builder /app/dist /usr/share/nginx/html
|