如何减小Electron.js可执行文件(.exe)的后续更新包体积?
Electron应用差分更新与更新包体积优化方案
一、用官方工具快速实现差分更新
Electron生态里的electron-updater自带差分更新支持,不用自己造轮子,能自动生成仅包含变更内容的更新包,配置起来很简单:
- 先安装依赖:
npm install electron-updater electron-builder --save-dev - 在
package.json的build字段里开启差分更新并配置发布地址:"build": { "appId": "com.your.app.id", "publish": [ { "provider": "generic", "url": "https://your-update-server.com/releases/" } ], "differentialUpdates": true } - 主进程里加自动更新逻辑:
const { autoUpdater } = require('electron-updater'); // 检查更新并通知用户 autoUpdater.checkForUpdatesAndNotify(); // 下载完成后提示重启安装 autoUpdater.on('update-downloaded', () => { autoUpdater.quitAndInstall(); });
这个方案会自动对比新旧版本的文件,只生成差异部分的更新包,默认支持exe的差分更新。
二、拆分应用模块,缩小核心更新范围
把非核心、大体积的内容从主程序包中剥离,更新时只动核心部分:
- 用
asarUnpack把大依赖、静态资源拆到asar包外:
这些文件不会打包进主asar,更新时如果没变化就不用重新下载。"build": { "asarUnpack": [ "node_modules/echarts/**/*", "static/offline-docs/**/*" ] } - 把非核心功能做成动态插件,放在单独的
plugins目录,更新时只替换对应的插件文件,不用碰主程序。
三、自定义差分逻辑,精准控制更新内容
如果需要更灵活的控制,可以自己实现版本文件对比:
- 构建新版本时,生成所有文件的哈希清单
version-hash.json,记录每个文件的路径和SHA256哈希值。 - 客户端检查更新时,把当前版本的哈希清单发给服务器,服务器对比新旧版本的哈希,找出变更的文件。
- 客户端只下载这些变更文件,替换本地对应路径的文件,替换完成后重启应用。
- 注意要处理文件锁定问题,比如替换前关闭相关进程,或者用临时文件替换后重启生效。
四、优化Electron基础镜像,减少初始体积
从根源缩小主程序体积,间接降低更新包大小:
- 自定义编译Electron,移除不需要的Chromium组件,比如禁用PDF支持、WebRTC、音频视频解码模块(如果应用用不上)。
- 优先选择LTS版本的Electron,避免新版本引入的冗余特性。
- 清理项目中未使用的依赖,用
npm prune --production移除开发依赖,减少打包体积。
内容的提问来源于stack exchange,提问作者Arun Kumar
相关产品推荐
相关产品推荐

