You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无代码签名与semver的Electron跨平台发布及自动更新实现方法

Electron跨端更新现有方案的核心限制
  • electron-builder配套的electron-updater强制要求程序版本严格遵循semver语义化版本规范,校验逻辑直接写死在源码中,版本格式不符合要求直接阻断更新流程
  • Electron原生自带的autoUpdates能力完全不支持Linux平台
  • electron-updater在macOS平台的更新逻辑强依赖代码签名,未签名的应用无法正常触发更新

当前技术生态中,Go语言的.mod、Clojure的deps.edn等实践,已经体现出不依赖npm、maven这类中间包管理渠道、直接使用源文件分发的发展趋势,完全没必要被现有更新方案的规则绑定,相关问题的实操方案如下:


1. 纯文件形式构建Electron产物的方法

要拿到electron-builder定义的dir(可直接运行的未压缩目录产物)、zip(压缩包形式纯文件产物)非常简单,不需要打包成exe、dmg、deb这类需要安装的格式,直接在electron-builder配置中指定对应构建目标即可,配置参考:

{
  "build": {
    "productName": "your-app",
    "win": {
      "target": ["dir", "zip"]
    },
    "mac": {
      "target": ["dir", "zip"]
    },
    "linux": {
      "target": ["dir", "zip"]
    }
  }
}

配置完成后执行常规构建命令,输出目录中就会生成可以直接分发、不需要安装流程的纯文件程序包。

2. 基于GitHub标签的轻量化自动更新实现

这套逻辑完全可以自主实现,不需要依赖任何第三方更新库,核心流程只有4步:

  • 程序启动时请求GitHub仓库的标签接口,拉取最新发布的版本标识,和本地存储的当前程序版本做比对,判断是否需要更新
  • 判定存在新版本时,直接下载对应版本的zip构建包到本地临时目录,可按需加文件哈希校验防止下载损坏
  • 退出当前运行的Electron主进程,将临时目录中解压后的新版本文件全量覆盖到程序本地安装目录
  • 覆盖完成后自动拉起新版本程序,更新结束

注意:Windows平台下运行中的程序文件会被系统锁定占用,无法直接替换,需要额外写一个几十行的独立脚本(bat/Node脚本均可),在主进程退出后触发脚本执行覆盖操作,覆盖完成后再启动新程序;macOS和Linux平台没有运行时文件锁限制,主进程退出后即可直接替换文件。

3. 无签名要求、支持任意更新源的文件级更新现成方案

这类不受semver规则限制、无强制代码签名要求、支持自定义更新源的方案已经比较成熟,常见选择有:

  • electron-delta-updater:只做文件层面的全量/差量替换,不强制校验版本格式、不检查代码签名,支持HTTP接口、对象存储、本地路径、GitHub Release等任意更新源,全平台兼容
  • 自主封装更新逻辑:核心代码量通常在200行以内,版本比对规则、更新源地址、替换逻辑完全可控,不管是用日期版本、commit哈希当版本号都可以,没有额外依赖包袱,大量内部Electron工具都采用这种方案
  • zydis:超轻量文件级更新库,不绑定任何官方分发渠道,所有更新流程都支持自定义配置,没有签名和版本规则的强制限制,适合不想从零写逻辑又嫌官方更新库约束太多的场景

内容的提问来源于stack exchange,提问作者Sergei-Udris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 03:01:17