electron 增量与全量更新
前景提要
公司使用 electron 构建 PC 和 MAC客户端项目,有个自动更新的需求,这里记录一下。
win 下可以实现增量和全量更新,MAC 实现全量更新。
这里全量更新有两种方式 ,一种是 electron-update 实现,一种是请求后端接口手动实现。
前者的局限在于判断是否更新由插件约定好,有一些插件约定的文件需要能够访问,如果服务器上可以提供除了安装包以外的文件访问,那就可以用这个方式。
后者是我目前的方式,由前端将打包好的增量、全量更新文件给后端,服务器上只能存更新文件,所以没法用前者的方式。
不过这两种更新方式我都实现了,可以参考下代码。
原理
- client 请求服务器查询是否更新
- win 下增量更新只需要替换 resource/app 内的代码即可,所以下载压缩包,解压到目录,重启窗口就可以了
- win 下全量更新弹出安装流程,下一步
- MAC 只有一个文件,问了用 MAC 的同事,大多数软件都是替换 APP 即可,所以只有全量更新
- 增量更新为仅更新页面,不能更新 electron ,所以如果对 electron 有修改,则只能全量更新
code
第一种实现方式 autoUpdata.js
js
1 | const { app, ipcMain, } = require('electron'); |
第二种实现方式
autoUpdate.js
js
1 | const { app, ipcMain, } = require('electron'); |
background.js
js
1 | import update from './utils/electron/autoUpdate.js' |
打包完成后将增量更新资源压缩。由于 webpack 未提供打包完成后的生命周期,所以只能由命令行运行
updateZip.js
js
1 | /* 压缩增量更新文件 */ |
这里在打包完的命令后面增加压缩文件的命令 package.json
json
1 | { |