Skip to content

chore: upgrade Node.js 14 → 20 LTS, migrate Dockerfile to pnpm - #5

Draft
fghpdf with Copilot wants to merge 7 commits into
mainfrom
copilot/upgrade-nodejs-to-20-lts
Draft

fghpdf with Copilot wants to merge 7 commits into
mainfrom
copilot/upgrade-nodejs-to-20-lts

Conversation

Copilot AI commented Apr 26, 2026

Copy link
Copy Markdown
  • Diagnose: lockfile regenerated with pnpm v10.33.2 (format v9.0) but no packageManager field → Vercel defaults to pnpm 8.x which can't read lockfile v9.0
  • Add "packageManager": "pnpm@10.33.2" to package.json — Vercel/corepack will now use the correct pnpm version
  • Update Dockerfile all three stages: pnpm@8.15.9pnpm@10.33.2
  • Verified: ✓ Compiled successfully
Original prompt

目标

将项目的 Node.js 版本从 14 升级到 20 LTS。

需要修改的内容

1. Dockerfile

  • 将所有 node:14-alpine 镜像替换为 node:20-alpine
  • 将构建工具从 yarn 替换为 pnpm(项目已使用 pnpm,有 pnpm-lock.yaml
  • 使用 corepack enable 启用 pnpm
  • 添加多阶段构建的 runner 阶段,减小最终镜像体积
  • 因为项目依赖了 canvas(原生模块),需要在 deps 阶段安装 python3 make g++ 编译工具

2. package.json

  • 添加 engines 字段,声明 Node.js 版本要求:
    "engines": {
      "node": ">=20.0.0"
    }

背景信息

  • 项目使用 Next.js 14、React 18,均完全支持 Node 20+
  • Node 14 已于 2023 年 4 月 EOL,需要尽快升级
  • 项目使用 pnpm(有 pnpm-lock.yamlpackage.json 中的 pnpm 字段),但 Dockerfile 仍在用旧的 yarn
  • canvas@^2.11.2 是原生模块,需要确保编译依赖在 Dockerfile 中已安装

The following is the prior conversation context from the user's chat exploration (may be truncated):

User: 这个项目升级到 Node 20+ 吗

Assistant: 可以升级!以下是需要改动的地方:

当前状态

  • Dockerfile:使用 node:14-alpine(已过时,Node 14 早已 EOL)
  • package.json:未指定 engines 字段,无版本限制
  • 依赖next@^14react@^18 — 这些都完全支持 Node 20+

需要修改的文件

1. Dockerfile — 升级 Node 镜像,并建议同时用 pnpm 替换 yarn(项目已用 pnpm):

ARG NOTION_PAGE_ID=
# Install dependencies only when needed
FROM node:20-alpine AS deps
RUN apk add --no-cache libc6-compat python3 make g++
WORKDIR /app
RUN corepack enable && corepack prepare pnpm@latest --activate
COPY package.json pnpm-lock.yaml ./
RUN pnpm install --frozen-lockfile

# Rebuild the source code only when needed
FROM node:20-alpine AS builder
ARG NOTION_PAGE_ID
WORKDIR /app
RUN corepack enable && corepack prepare pnpm@latest --activate
COPY . .
COPY --from=deps /app/node_modules ./node_modules
RUN pnpm build

FROM node:20-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/public ./public
COPY --from=builder /app/package.json ./package.json
COPY --from=builder /app/node_modules ./node_modules
EXPOSE 3000
CMD ["node_modules/.bin/next", "start"]

2. package.json — 添加 engines 字段明确声明版本要求:

"engines": {
  "node": ">=20.0.0"
}

注意事项

  • canvas@^2.11.2 是原生模块,升级 Node 版本后需要重新编译,Dockerfile 里加了 python3 make g++ 来支持编译
  • 建议升级到 Node 20 LTS(目前维护中),或 Node 22 LTS 也完全兼容

需要我帮你创建一个 PR 来完成这些升级吗?

User: 嗯嗯

Assistant: 我已经提交了创建 PR 的任务,稍等片刻正在处理中。完成后你会在仓库 fghpdf/nobelium 的 Pull Requests 页面看到新的 PR,包含以下改动:

  • Dockerfilenode:14-alpinenode:20-alpine,yarn → pnpm,添加多阶段 runner 构建,补充 canvas 所需的原生编译依赖
  • package.json:添加 "engines": { "node": ">=20.0.0" }

This pull request was created from Copilot chat.

@vercel

vercel Bot commented Apr 26, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
nobelium-n67m Error Error Apr 26, 2026 2:46am

Copilot AI changed the title [WIP] Update Node.js version from 14 to 20 LTS chore: upgrade Node.js 14 → 20 LTS, migrate Dockerfile to pnpm Apr 26, 2026
Copilot AI requested a review from fghpdf April 26, 2026 02:21
Agent-Logs-Url: https://github.com/fghpdf/nobelium/sessions/80ce1979-41c2-4d63-82c1-b55109cbf1e7

Co-authored-by: fghpdf <7081582+fghpdf@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants