在 Mac 上启用 asar 时,Electron forge 会抛出 \'.../python3.8\" links out of the package\' 错误

分享于2022年11月15日 electron electron-forge electron-packager node.js 问答
【问题标题】:Electron forge throws '.../python3.8" links out of the package' error when making with asar enabled on Mac在 Mac 上启用 asar 时,Electron forge 会抛出 \'.../python3.8\" links out of the package\' 错误
【发布时间】:2022-08-22 20:03:03
【问题描述】:

我正在尝试分发一个电子项目。所以我遵循官方指南并使用电子锻造。这是我的 config.forge:

\"config\": {
    \"forge\": {
      \"packagerConfig\": {
        \"asar\":true,
        \"ignore\":[
          \"^/[.].+$\",
          \"^/app/src$\",
          \"^.*/tsconfig([.].*)?[.]json\",
          \"^/angular[.]json\",
          \"^/frontend$\",
          \"^/build$\"
        ]
      },
      \"makers\": [
        {
          \"name\": \"@electron-forge/maker-squirrel\",
          \"config\": {
            \"name\": \"my-app\"
          }
        },
        {
          \"name\": \"@electron-forge/maker-zip\",
          \"platforms\": [
            \"darwin\"
          ]
        },
        {
          \"name\": \"@electron-forge/maker-deb\",
          \"config\": {}
        },
        {
          \"name\": \"@electron-forge/maker-rpm\",
          \"config\": {}
        }
      ]
    }
  }

没有 asar:true ,它构建得很好。但是如果我添加 asar:true ,它会抛出这个错误:

An unhandled rejection has occurred inside Forge:
Error: /var/folders/k1/12r0xrxd01n7zgfpqfxppqm80000gn/T/electron-packager/darwin-arm64/my-app-darwin-arm64/Electron.app/Contents/Resources/app/node_modules/@serialport/bindings-cpp/build/node_gyp_bins/python3: file \"../../../../../../../../../../../../../Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.8/bin/python3.8\" links out of the package

Electron Forge was terminated. Location:
{}

【解决方案1】:

这似乎是由这个 node-gyp 问题引起的: https://github.com/nodejs/node-gyp/issues/2713

Node-Gyp 现在创建指向检测二进制版本的链接,显然是为了帮助它在构建期间始终使用相同的版本。这些是在构建完成后留下的,它们指向项目目录之外(例如指向 /usr/bin/python )。这使得各种工具拒绝将你的 node_modules 与这些链接捆绑在一起。

这确实是 node-gyp imo 中的一个错误,但修复它可能需要一些时间。您可以尝试自己在 node-gyp 项目中为该错误提供修复,或者同时您可以通过在构建之前删除 node_modules 中的所有 node_gyp_bins 文件夹来解决此问题。

【讨论】: