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. 解决方案
✅ 推荐做法(官方推荐方式)
-
删除 npm install -g pnpm@xxx。
-
使用 corepack 管理 pnpm 版本:
🔧 其他可选方式
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 |