electron 自动更新之路总结(上)版本管理服务器

本文详细讲述了使用electron-release-server搭建自定义electron应用更新服务器的过程,包括其优缺点、配置步骤,以及客户端如何配合electron-updater进行自动更新和打包策略。重点讨论了NSIS下载问题和版本可用时间调整的bug。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

花了我将近一个星期才最终把 electron 自动更新走通,其中无数卧槽。整体方案是 electron 14 + electron-release-server + electron-updater + electron-builder. 现做个总结,分上下两部分,上部分讲服务器,下部分讲客户端+electron-updater以及如何打包。

electron-release-server

官网地址 GitHub - ArekSredzki/electron-release-server: A fully featured, self-hosted release server for electron applications, compatible with auto-updater.

nodejs 开发的服务。先说优点:使用简单,零配置,除了数据库和管理员账号密码;上传安装包自动生成 latest.yml ;支持 nsis 、squerrel 更新。

再说缺点:不支持range download,不支持差异比较下载;不支持 useMultipleRangeRequest . 对于使用 NSIS 方式不支持指定 flavor。偶尔还有内存泄漏(希望后续版本修复)。

尤其是不支持指定 flavour 非常难受。ers 只支持 flavour 为 default 的自动更新,在 NSIS 的方式下。话句话说,起一个服务只能用于 1 个APP的自动升级。第二个APP 怎么办?再起一个服务呗。。。

安装过程:

$ git clone https://github.com/ArekSredzki/electron-release-server.git
$ cd electron-release-server
## 配置文件
$ cd ./config
$ mv local.template local.js
## 修改 local.js
# 管理员账号密码
    static: {
      username: '账号',
      password: '密码'
    },
# 数据库
mysql: {...}
# session
session : {...}
# 文件目录
files: {
    dirname: 上传文件保存的位置
}
## 修改 config/env/development.js  config/env/production.js
# 使用 mysql 数据库。
models: {
    connection: 'mysql'
}
## 启动
npm run --prod


启动后自动创建数据库。

管理软件版本

发布软件版本非常简单,就不一一赘述了。提一提容易踩坑的地方。

版本可用时间 Availability 的问题

默认为当前时间。可往后设置,但不能往前设置。但实际使用中发现问题,刚发布的版本总是检测不到。于是尝试在数据库把version.avalability 字段往前调了 8 小时,奇迹般能检测到了。所以有理由怀疑是时区差异的导致。这应该是个 bug。截至撰文时该 bug 没有修复。

 NSIS 下载的问题

使用 NSIS 方式更新可检测到更新,并且启动下载。可问题来了,实际下载的文件比真实的安装包大了好几倍,最要命还更新不了。细究发现是客户端使用了分段下载的方式(range download),而 ers 并不支持分段下载,因此每个请求都是下载完整的文件。那好办,关闭分段下载就可以了吧?不不不,electron-updater 并没有任何关闭 range download 的配置。#@¥%…!

再经过研究,nsis 的差异比较下载是依赖打包生成的 *.blockmap 文件的。于是发布新版本时不上传 blockmap 文件,结果 electron 顺利下载更新升级。只不过下载的是完整安装包。

上篇完。下篇讲客户端如何配置自动升级,以及打包成安装包。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值