Electron builder 打包和自动更新

有关 Electron 打包,网上有很多文章,但一些已经过时,并不适用于最新的版本,在研究的时候因此而走了一些弯路。

截止本文,我使用的相关版本是:

  • electron v1.6.4
  • electron-builder v16.4.1

大家可以根据情况阅读本文。

两种主流的打包工具

官方文档中两种主要工具是 electron-packager 和 electron-builder,区别主要是:

  • electron-packager 主要是程序打包,并不包含生成 Installer,且不能在 Mac 下打包 Win 程序
  • electron-builder 是包含了 electron-packager,能够生成 Installer,并且可以在 Mac 平台下打包 Mac, Linux 和 Windows 包

electron-builder 工具功能更强大,不仅支持打包,生成 Installer,而且还可以发布到 GitHub 或 S3 等平台,且支持自动更新。

electron-builder 的文档

文档地址:link

electron-builder 代码提交很活跃,更新较频繁,文档也同样😔。

吐槽一下它的 Options 文档,后半部分貌似是从代码注释中自动生成的文档,是根据代码类名排序的内容,而不是一般的理解和配置顺序,查看时候需要关注其配置项的名称和继承关系,并且有些链接是坏的。

它提供了两种配置方式,这里主要介绍通过 package.json 这种方式。

建议阅读的顺序是:

  1. [Metadata](https://github.com/electron-userland/electron-builder/blob/master/docs/Options.md#Metadata) 这部分写的是 Package.json 中的配置项
  2. [Config](https://github.com/electron-userland/electron-builder/blob/master/docs/Options.md#config–platformspecificbuildoptions) 这是在 package.json#build 中的配置

在阅读文档时,注意 Type 一栏列出的链接,然后再搜索找到相应的详细配置部分。(有的可能不在本页面内,可以在源码 packages/目录 中寻找)

OSX Signing

App 的分发有两种形式:.app 及 MAS。

app 不签名默认是无法运行的。

我们需要购买一个 Apple 开发者账号,并本地生成一个密钥,然后导入证书。

refer:[link](https://github.com/nwjs/nw.js/wiki/MAS%3A-Requesting-certificates)

对于其它开发者,可以通过导出并分享.p12 文件添加。

Windows Signing

refer: [link](https://www.npmjs.com/package/electron-installer-windows#signing)

默认 Mac 下安装 mono 后,应该会有 makecertpvk2pfx 这两个工具。如果没有,可以到 Win 下进行签名,或者直接从网上下载。

有关自动更新

electron-builder 的自动更新机制依赖的是 Squirrel.Mac 和 Squirrel.windows,并且最新版本已经可以实现不需要准备一台接口服务器,只需要静态服务器便可实现。

Refer: [link](https://github.com/electron-userland/electron-builder/blob/master/docs/Auto%20Update.md)

一般,用 S3 是比较省心的,按照文档配置就可以实现 Win 和 Mac 双平台的自动更新,只需要代码响应相应事件即可。

但我们所使用的是 GitHub Private Repo,有鉴权的问题。采用的解决方案是 Nuts + GitHub, Nuts 作为更新接口,GitHub 提供存储。

相关配置如下:

自动静默后台更新实现:

调试打包过程

electron-builder 遵循惯用的调试日志方式:

这样执行打包过程后,会输出详细的过程日志,对调试很有帮助。

最后

electron-builder 因为文档有点不太完美,实际学习起来会有点吃力,遇到文档不能很好解决的问题,可以去查 Issues 和 代码,另外,关注 Releases 最新版本和发版说明。

5 评论

  1. 请教博主下,我用 electron-builder 的 autoUpdater 做自动更新,app 下载完更新包后报错提示 OSStatus 60005,不知道博主有没有遇到过类似问题呢?使用的是 dmg 文件安装,有签名。谢谢~

    1. 很遗憾并没有遇到过。我简单查了下,可能是由于 DMG 安装后启动的 app 所在目录在更新时没有足够权限导致,而且很可能与 squirrel 有关(autoUpdater 是基于此实现的)。
      建议你升级 electron 和 electron-builder 到最新版本试一下。

      1. 感谢博主这么快回复,刚刚做了多种尝试,发现问题是我给 mac 和 mas 同时配了沙盒机制,导致的权限问题,把 mac 的沙盒机制去掉已经可以正常自动更新了。。。这个问题已经折腾了两天。。。再次感谢🙏博主,看博主的文章有很大帮助,后面有问题再来找博主请教哈~~

发表评论