如何让Electron Builder macOS代码签名跳过Locale文件?
解决方案:移除Electron locale文件并跳过签名(或直接删除)
完全可以把这些多余的locale文件从代码签名阶段移除,甚至直接从安装包中清理掉,下面分场景给你具体方法:
1. 先确认electronLanguages配置是否真的生效
你用的electronLanguages: "en"配置本身是正确的,但要注意两个细节:
- 部分旧版本electron-builder要求用数组格式:
"electronLanguages": ["en"] - 这个配置会自动删除Electron Framework里非指定语言的locale文件,但少数版本可能没覆盖到
Versions/A、Versions/Current这类软链接指向的目录,你可以直接打开打包后的.app包检查——如果非en的locale文件还存在,说明配置没生效,换下面的方法。
2. 用files字段直接排除多余文件
在package.json的build节点里添加files配置,明确保留英文locale文件,排除其他所有:
{ "build": { "electronLanguages": ["en"], "files": [ "**/*", "!**/Frameworks/Electron Framework.framework/**/*.lproj/locale.pak", "**/Frameworks/Electron Framework.framework/**/en.lproj/locale.pak" ] } }
这样打包时会自动删掉非英文的locale文件,自然不会进入后续的签名阶段。
3. 仅跳过签名(不删除文件)
要是你不想删除文件,只是不想让这些locale文件被签名,可以用signingIgnore字段指定签名时忽略的路径:
{ "build": { "mac": { "signingIgnore": [ "**/*.lproj/locale.pak" ] } } }
这个配置会告诉代码签名工具直接跳过所有匹配的locale文件,不执行签名操作。
4. 用afterPack钩子手动清理
如果上面的配置都没生效,还可以写个自定义脚本,在打包完成后、签名前手动删除多余文件:
- 在项目根目录新建
scripts/clean-locales.js:
const fs = require('fs'); const path = require('path'); module.exports = async (context) => { const frameworkPath = path.join(context.appOutDir, 'Contents/Frameworks/Electron Framework.framework'); // 递归遍历所有目录,清理非英文locale文件 const walkDir = (dir) => { const files = fs.readdirSync(dir); for (const file of files) { const fullPath = path.join(dir, file); const stat = fs.statSync(fullPath); if (stat.isDirectory()) { if (file.endsWith('.lproj') && file !== 'en.lproj') { const localePakPath = path.join(fullPath, 'locale.pak'); if (fs.existsSync(localePakPath)) { fs.unlinkSync(localePakPath); } } walkDir(fullPath); } } }; walkDir(frameworkPath); };
- 在
package.json的build里配置钩子:
{ "build": { "afterPack": "./scripts/clean-locales.js" } }
这个脚本会在打包完成后自动清理所有非en.lproj目录下的locale.pak文件。
内容的提问来源于stack exchange,提问作者Walton
相关产品推荐
相关产品推荐

