查看: 83|回覆: 0

Next.js + pnpm Docker 构建问题

[複製鏈接]

3

主題

0

回帖

0

積分

热心网友

金币
0
閲讀權限
220
精華
0
威望
0
贡献
0
在線時間
0 小時
註冊時間
2012-2-11
發表於 2025-9-19 16:25:00 | 顯示全部樓層 |閲讀模式

1. 问题现象

在 Docker 构建过程中,执行:

RUN npm install -g pnpm@10.11.1

时报错:

npm error EEXIST: file already exists
npm error File exists: /usr/local/bin/pnpm

2. 问题原因

  • 基础镜像 node:22-alpine3.21 已经自带了 pnpm
  • corepack enable 会在 /usr/local/bin/ 下生成 pnpm 的 shim 文件。
  • 再执行 npm install -g pnpm@xxx 时会和已存在的 /usr/local/bin/pnpm 冲突,导致 EEXIST

3. 解决方案

✅ 推荐做法(官方推荐方式)

  1. 删除 npm install -g pnpm@xxx

  2. 使用 corepack 管理 pnpm 版本:

    • package.json 里指定:

      {
        "packageManager": "pnpm@10.11.1"
      }
      
    • Dockerfile 示例:

      RUN corepack enable
      COPY package.json pnpm-lock.yaml ./
      RUN corepack install
      RUN pnpm install --frozen-lockfile
      

🔧 其他可选方式

  • 强制覆盖安装

    RUN npm install -g pnpm@10.11.1 --force
    
  • 先卸载再安装

    RUN npm uninstall -g pnpm && npm install -g pnpm@10.11.1
    

4. 当前 Dockerfile 改进

在你的 Dockerfile 中:

RUN corepack enable
# ...
RUN corepack install
RUN pnpm install --frozen-lockfile

已经不再显式安装 pnpm,避免了冲突。
只要在 package.json 里声明 packageManager: "pnpm@10.11.1",就能保证构建时使用正确版本。


📌 记忆要点

  • Node 18+ 默认带 corepack。
  • corepack + package.json 管理 pnpm 版本,推荐用这种方式。
  • 避免重复 npm install -g pnpm,否则容易 EEXIST


来源:https://www.cnblogs.com/echohye/p/19101113
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即注册

本版積分規則

相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部