pnpm config get ignore-scripts ls node_modules/.pnpm/esbuild@*/node_modules/esbuild/bin pnpm rebuild esbuild
流水线里 pnpm install 之后跑构建,报 You installed esbuild for another platform than the one you're currently using,本地装完能跑,CI 上 esbuild 的二进制文件不存在。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,pnpm 10 起默认不执行依赖包的安装脚本,只有列进 onlyBuiltDependencies 的包才会跑 postinstall,esbuild 的平台二进制正是靠这一步下载。CI 缓存命中旧 node_modules 时,缺失的二进制也不会被补上。
这次卡住的地方就在「pnpm 脚本被忽略」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。
验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。
处理上按这个顺序:在根 package.json 的 pnpm.onlyBuiltDependencies 里列出 esbuild;CI 里确认 install 日志出现 esbuild 的 postinstall;清掉缓存重新装一次 验证二进制文件存在;固定 pnpm 版本 避免本地和 CI 行为不同。
改完只确认一件事:CI 构建不再报平台不匹配 esbuild 的 bin 目录下有对应平台的二进制。
