// electron-builder afterPack 钩子:打包完成后精简发行目录 // 当前裁剪项:locales 语言包(仅保留中文 + 英文,省 ~50MB 未压缩体积) // 如需进一步瘦身:取消下方 dxcompiler/dxil 注释可移除 WebGPU 着色器编译器(省 ~26MB,仅大屏用到 WebGPU 才受影响) const fs = require('fs') const path = require('path') /** 保留的语言包(Chromium 的 .pak 文件) */ const KEEP_LOCALES = new Set(['zh-CN.pak', 'zh-TW.pak', 'zh-HK.pak', 'en-US.pak']) /** 可选删除的文件(WebGPU 专用,一般大屏网页用不到) */ const OPTIONAL_REMOVE = [ // 'dxcompiler.dll', // DirectX Shader Compiler,WebGPU 编译用,~24MB // 'dxil.dll', // DXIL 支持库,~1.4MB ] exports.default = async (context) => { const appDir = context.appOutDir // 1. 裁剪 locales:只保留中文 + 英文 const localesDir = path.join(appDir, 'locales') if (fs.existsSync(localesDir)) { let removed = 0 for (const f of fs.readdirSync(localesDir)) { if (!KEEP_LOCALES.has(f)) { try { fs.unlinkSync(path.join(localesDir, f)) removed++ } catch (e) { console.warn('[afterPack] 删除失败:', f, e.message) } } } console.log(`[afterPack] locales 裁剪完成,删除 ${removed} 个语言包,保留 ${KEEP_LOCALES.size} 个`) } // 2. 可选删除体积大户(默认关闭,需手动启用) for (const name of OPTIONAL_REMOVE) { const p = path.join(appDir, name) if (fs.existsSync(p)) { const size = fs.statSync(p).size fs.unlinkSync(p) console.log(`[afterPack] 已删除 ${name}(${(size / 1024 / 1024).toFixed(1)} MB)`) } } }