You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Electron应用中使用pnpm?打包报错解决方案求助

解决pnpm+electron-builder打包后缺失builder-util-runtime的问题

问题背景

用pnpm替代npm/yarn优化node_modules体积后,electron-builder打包的应用启动时抛出错误:Error: Cannot find module 'builder-util-runtime',根源是electron的asar打包机制与pnpm的依赖链接/隔离逻辑不兼容。

可行解决方案

1. 临时禁用asar打包

asar的压缩打包逻辑会破坏pnpm依赖的软链接结构,导致模块查找失败。修改package.json的build配置,添加asar: false:

"build": {
  "appId": "com.Toolbox",
  "productName": "Toolbox",
  "asar": false, // 新增该行
  "files": [
    "build/*",
    "node_modules/**/*",
    "Functions/**/*",
    "Modules/**/*",
    "src/**/*"
  ],
  // 其余配置保持不变
}

优点:快速生效,无需调整依赖结构;缺点:打包后体积增大,失去asar的压缩保护。

2. 开启pnpm的shamefully-hoist选项

pnpm默认严格隔离依赖,深层子依赖不会被提升到node_modules根目录,导致electron-builder无法扫描到部分嵌套模块。在项目根目录创建.npmrc文件,添加:

shamefully-hoist=true

执行pnpm install重新安装依赖后再打包。

原理:将所有依赖(包括子依赖)提升到node_modules根目录,模拟npm/yarn的扁平依赖结构,让electron-builder能正常识别所有需要的模块。

3. 明确指定缺失模块的打包范围

在package.json的build.files中直接添加缺失模块的路径:

"files": [
  "build/*",
  "node_modules/**/*",
  "node_modules/builder-util-runtime/**/*", // 明确包含该模块
  "Functions/**/*",
  "Modules/**/*",
  "src/**/*"
]

注意:这是临时治标方案,若后续出现其他缺失模块需重复添加,优先推荐前两种方案。

4. 更新electron-builder版本

当前使用的electron-builder@24.9.1对pnpm的兼容性有限,新版本已优化相关逻辑。执行命令更新:

pnpm add electron-builder@latest -D

更新后重新安装依赖并打包,可能直接解决兼容性问题。

内容的提问来源于stack exchange,提问作者JediSZN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 13:13:16