🍏 Electron 自动更新 - 增量更新

线上客户端版本需要更新一般有两种方式 全量更新增量更新

当前为增量更新:

  • 适用场景:功能特性的改进、小功能的上线、普通 BUG 的修复。让你 「 情绪保持稳定 」 的更新
  • 更新流程:
    • 客户端通过定时检测、或者服务端推送方式检测是否有更新
    • 通过版本对比发现更新,并获取到需要更新的文件名称
    • 下载 app.asar.upacked.xxx.tgz 更新文件到应用的指定目录(路径因系统而异)
    • 解压覆盖原文件,重启应用
  • 应用在代码改动较少的情况下,用户体验好、比较优雅的更新方式就是增量更新了。增量更新的方案也有多种,具体的增量更新方案需要针对具体的业务需求进行定制。下边介绍两种常见的增量更新方案,我们仍然是基于 electron-builder 的打包方式来实现的。

🍐 固定模块升级

asar 是 Electron 提供的一种将多个文件合并成一个文件的类 tar 风格的归档格式,不仅可以缓解 Widows 下路径名过长的问题,还能略微加快 require 的速度,并且可以隐藏你的源代码(并非绝对隐藏,专业人士还是可以解压缩的),了解更多请查看官方文档 asar

基于 electron-builderasar 打包配置。

{
"appId": "com.test.app",
"productName": "APP",
"files": ["./build/**/*"],
"compression": "maximum",
"asar": true,
"directories": {
"output": "dist"
},
"mac": {
"target": ["dmg", "zip"]
}
}

🥝 打包生成的文件

根据配置文件打包后会生成安装包和增量包,其中 app.asar 压缩文件就是基本不要变动的代码,app.asar.upacked 目录就是我们的增量文件,也就是需要变更的代码。最后注意我们要对增量包进行压缩,减少更新包体积,然后上传文件到服务器。

├── dist
├── win-unpacked
├── resources
├── app.asar
├── app.asar.unpacked
├──
├── app.exe
├── builder-effective-config.yaml
├── latest.yml
├── app-0.0.2.exe
└── app-0.0.2.exe.blockmap

未完待续....