Quiet
  • 主页
  • 归档
  • 分类
  • 标签
  • 链接
  • 关于我

bajiu

  • 主页
  • 归档
  • 分类
  • 标签
  • 链接
  • 关于我
Quiet主题
  • NodeJs
  • Electron

Electron 应用 `electron-updater` 自动更新

bajiu
前端

2021-09-01 11:15:00

electron 一般有两种方式更新:

  • 主进程修改: 全亮更新
  • 渲染进程修改: 全亮/增量更新

electron-updater

一般我们都用 electron-updater 包来进行我们 electron 应用的自动更新, electron-updater 更新只需要把一个 url 传入, 然后它会自动查找${url}/xxx.yml 文件, 根据这个yml文件检测更新及下载, 这个url下是放静态资源的,简单来说就是这个链接类似访问一个目录,这个目录下需要有更新的文件以及检测更新的文件, 一般更新流程如下:

  • 接口请求返回更新信息, 拿到更新逻辑之后对比触发更新
  • electron-updater 包自动更新下载至本地缓存, 抛出下载状态
  • 替换缓存包与本地包, 重启应用完成更新

更新文件在 electron-builder 打包时候会生成我们需要的 .yml 文件

  • win: latest.yml, exe
  • mac:latest-mac.yml, zip

zipSquirrel.Mac 需要 macOS 的 target , 否则 latest-mac.yml 无法创建, 导致 autoUpdater 报错. macOS 的默认目标是 dmg + zip , 因此无需明确指定目标

支持 Mac M1 芯片

由于最新的 Electron 已经支持了 M1 芯片, arm 架构下的 Mac, 支持条件:

  • Electron 11.0.0 版本以上
  • electron-builder 22.9.1 以上

支持 Intel 和 Apple M1 的通用应用需要在配置中吧 arch 值设置为 universal 就行了

下载缓存

在开发时我们可能会做开发调试, 比如看下载进度呀什么的, 先打了一个高版本的放在远程地址, 本地重复安装低版本的看更新效果, 但是在第一次更新完成后, 后面的更新都是瞬间完成了, 看不到进度, 这里是由于 electron-updater 在更新时会检测本地是否下载过这个高版本, 有的话直接用本地的进行安装, 我们可以把这个缓存文件删除掉

electronName 这个是你设置的name
win:C:\Users\Administrator(你的用户)\AppData\Local\electronName-updater
mac:~/Library/Application Support/Caches/electronName-updater

更新错误检测

比较常见的几个可能会引发的问题:

  • mac端下载进度不动: mac端打包会出现三个文件, dmg安装包, dmg 的 zip 压缩包以及 yml 件, 比 win 多一个 zip 压缩包, mac 更新下载的是 zip 文件, 很多同学以为和 win 的 exe 一样放 (win是exe和yml) , 把dmg文件放到更新地址下,没有zip文件,这会导致检测到更新, 但下载进度却不动.
  • 更新下载后没有重启, 打开软件版本也没有变: 可能在关闭渲染进程中使用了 e.preventDefault() , 我们在调用重启更新时设置一下 willQuitApp 让其正常关闭
global.willQuitApp = true
autoUpdater.quitAndInstall()
上一篇

前端技术调研

下一篇

vite中预加载模块 `modulepreload`

©2025 By bajiu.