PNPM 升级 V11 导致构建失败的处理

2026-05-07 · 周四一般

公司项目发布生产环境居然遇到报错构建失败,简单查了下报错信息,主要是这个错误导致的:

[ERR_PNPM_IGNORED_BUILDS] Ignored build scripts: @parcel/[email protected], [email protected], [email protected], [email protected], [email protected]

Run "pnpm approve-builds" to pick which dependencies should be allowed to run scripts.

看上去是 pnpm 升级了一套阻止自动执行 preinstall 脚本的二次验证机制,之前不是 Axios 出现过供应链攻击,这次它升级了一个 V11 的大版本,估计就是解决这个问题的。

我们有好几个 DockerFile 对应不同的环境,测试环境正常,因为用了 Node 18 的镜像,而生产则是用了 Node 22,这次 pnpm 的升级 要求最低版本 Node 22,于是只有生产环境构建出错。

起初我想到的解决方法是强行降级 pnpm 到 V10,用 GPT 调整构建流程,改成 npm install pnpm@10 发现并不管用,反复试了好几次,在我的 Mac 电脑上尝试构建,还会遇到 esbuild 报错 /app/node_modules/.bin/../esbuild/bin/esbuild: line 0: syntax error: unterminated quoted string,GPT 说是二进制包的架构有问题,大概率是 COPY 了 node_modules 之后的问题,也没解决,拿实际的 CI 环境去测试了。


后续第二天直接按照报错,给 DockerFile 的步骤里面加了句 pnpm approve-builds 发现就好了,也没任何包需要同意的,挺诡异的。原先我还以为需要增加 --all 属性,因为 官方文档 有写,实际上这个选项是不存在的...

# 修改前
RUN \
  if [ -f yarn.lock ]; then yarn --frozen-lockfile; \
  elif [ -f package-lock.json ]; then npm ci; \
  elif [ -f pnpm-lock.yaml ]; then npm install -g pnpm && pnpm i; \
  else echo "Lockfile not found." && exit 1; \
  fi

# 修改后
RUN \
  if [ -f yarn.lock ]; then yarn --frozen-lockfile; \
  elif [ -f package-lock.json ]; then npm ci; \
  elif [ -f pnpm-lock.yaml ]; then \
    corepack enable && \
    pnpm approve-builds && \
    pnpm i; \
  else echo "Lockfile not found." && exit 1; \
  fi
Paul

Paul

特立独行的一只前端菜狗。这篇日记编写大概耗时了 11 分钟,内容均为个人原创,并采用 CC BY-NC-SA 4.0 授权协议,转载请注明来源,谢谢!如本站内容对你有所帮助的话,不妨 捐助支持 一下?

奇趣音乐盒技术源于 Kico Player
Emmm,这里是歌词君