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

Electron Forge 通用Mac构建未传递指定arch参数问题

解决Electron Forge构建Mac通用版时ffmpeg-static架构不匹配问题

方案1:通过Electron Forge预构建钩子注入架构变量

Electron Forge构建universal包时,会先分别构建x64和arm64的单架构包再合并,可利用prePackage钩子在单架构构建阶段设置环境变量,强制ffmpeg-static编译对应架构的二进制:

  1. 修改项目根目录的forge.config.js,添加钩子配置:
module.exports = {
  // 保留原有配置...
  hooks: {
    prePackage: async (config, target) => {
      // 仅处理单架构构建流程(universal构建会触发两次单架构构建)
      if (target.arch !== 'universal') {
        // 设置npm架构参数,让ffmpeg-static识别目标架构
        process.env.npm_config_arch = target.arch;
        // 强制重新构建ffmpeg-static
        const { execSync } = require('child_process');
        execSync('npm rebuild --force ffmpeg-static', { stdio: 'inherit' });
      }
    }
  }
};
  • 核心逻辑:当Forge分别构建x64和arm64包时,钩子会自动设置对应架构的环境变量,触发ffmpeg-static重新下载匹配的二进制文件,最终合并为universal包时双架构文件都会存在。

方案2:手动预编译双架构依赖并合并

如果钩子方案未生效,可手动生成双架构的ffmpeg二进制后合并:

  • 在M1机器上,先编译x64版本依赖:
npm rebuild --arch=x64 --force ffmpeg-static
# 备份x64架构的ffmpeg二进制
cp node_modules/ffmpeg-static/ffmpeg ./ffmpeg-x64
  • 再编译arm64版本依赖:
npm rebuild --arch=arm64 --force ffmpeg-static
cp node_modules/ffmpeg-static/ffmpeg ./ffmpeg-arm64
  • 使用lipo工具合并为通用二进制:
lipo -create ./ffmpeg-x64 ./ffmpeg-arm64 -output node_modules/ffmpeg-static/ffmpeg
  • 执行通用构建命令:
electron-forge make --platform darwin --arch universal

方案3:给ffmpeg-static打补丁适配universal架构

通过patch-package工具修改ffmpeg-static的下载逻辑,让它自动处理universal架构的双二进制下载与合并:

  1. 安装依赖:
npm install patch-package --save-dev
  1. 打开node_modules/ffmpeg-static/index.js,修改下载逻辑:
    • 添加对universal架构的判断,同时下载x64和arm64的二进制文件
    • 调用lipo命令合并两个二进制文件到最终路径
  2. 生成并保存补丁:
npx patch-package ffmpeg-static
  • 后续每次执行npm install时,补丁会自动应用,无需重复操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 18:53:09