Electron asarUnpack配置无效:无法将EXE排除在asar包外求助
解决方案
你的问题核心是误用了Electron Builder的配置格式(package.json里的build字段),但Electron Forge不识别这套配置,得把资源相关配置移到forge.config.js的packagerConfig中,具体改法如下:
1. 清理无效配置
直接删掉package.json里的整个build字段,Electron Forge不会读取这个区域的配置。
2. 修改forge.config.js配置
在packagerConfig里添加extraResource和asarUnpack项,确保资源文件被正确复制并排除在asar包外:
const { FusesPlugin } = require('@electron-forge/plugin-fuses'); const { FuseV1Options, FuseVersion } = require('@electron/fuses'); module.exports = { packagerConfig: { asar: true, // 将指定目录的文件复制到打包后的resources目录下 extraResource: [ './resources/win' ], // 把resources/win下的所有文件排除在asar包外 asarUnpack: [ './resources/win/**/*' ] }, rebuildConfig: {}, makers: [ { name: '@electron-forge/maker-squirrel', config: {}, }, { name: '@electron-forge/maker-zip', platforms: ['darwin'], }, { name: '@electron-forge/maker-deb', config: {}, }, { name: '@electron-forge/maker-rpm', config: {}, }, ], plugins: [ { name: '@electron-forge/plugin-auto-unpack-natives', config: {}, }, new FusesPlugin({ version: FuseVersion.V1, [FuseV1Options.RunAsNode]: false, [FuseV1Options.EnableCookieEncryption]: true, [FuseV1Options.EnableNodeOptionsEnvironmentVariable]: false, [FuseV1Options.EnableNodeCliInspectArguments]: false, [FuseV1Options.EnableEmbeddedAsarIntegrityValidation]: true, // 注:若调用EXE时出现权限或路径问题,可暂时将此选项改为false测试 [FuseV1Options.OnlyLoadAppFromAsar]: true, }), ], };
3. 修正EXE调用路径
打包后,EXE文件会被放到安装目录/resources/win下,代码里要动态获取资源路径,避免硬编码:
const { app } = require('electron'); const path = require('path'); const { spawn } = require('child_process'); // 获取打包后的resources目录绝对路径 const resourcesPath = app.getPath('resources'); // 拼接目标EXE的完整路径 const exePath = path.join(resourcesPath, 'win', '你的EXE文件名.exe'); // 调用外部EXE spawn(exePath, [], { stdio: 'inherit' });
验证打包结果
重新执行npm run package或npm run make,安装后查看安装目录/resources,会看到win文件夹(内含你的EXE)和app.asar,此时EXE已不在asar包内。
内容的提问来源于stack exchange,提问作者user3191192
相关产品推荐
相关产品推荐

