Electron应用打包方式

  1. Electron打包工具有三种:[electron-builder](https://www.electron.build/),[electron-packager](https://github.com/electron/electron-packager),[electron-forge](https://github.com/electron-userland/electron-forge)。它们多有各自的特点:

electron-forge

Electron Forge is a complete tool for creating, publishing, and installing modern Electron applications.

  1. Electron Forge是一个创建、发布、安装 Electron 应用的完整的工具。Electron Forge类似cli,是一个工具集,功能比较全面,使用它可以简化开发到打包的一整套流程。它内部的打包工具是:[electron-packager](https://github.com/electron/electron-packager)。

electron-packager

  1. Electron Packager是一个命令行工具和Node.js库,它将基于Electron的应用程序源代码与重命名的Electron可执行文件和支持文件捆绑在一起,准备分发。<br /> 要创建诸如安装程序和Linux软件包之类的可发行内容,请考虑使用Electron Forge(内部使用Electron Packager)或相关的Electron工具之一,该工具以Electron Packager创建的文件夹为基础。<br /> 请注意,打包的Electron应用程序可能会比较大。 压缩的最小化Electron应用程序的大小与给定目标平台,目标archElectron版本的压缩预构建二进制文件大小大致相同(文件名为electron-v $ {version}-$ {platform}-$ {arch} .zip )。

electron-builder

  1. 一种适用于macOSWindowsLinux平台的打包、构建可分发Electron应用程序的完整解决方案,开箱即用。
  • NPM软件包管理:
  • CI服务器或开发计算机上的代码签名
  • 自动更新就绪的应用程序打包。
  • 多种目标格式:
    • 所有平台:7z,zip,tar.xz,tar.lz,tar.gz,tar.bz2,dir(解压目录)。
    • macOS:dmg,pkg,mas,mas-dev。
    • Linux:AppImage,snap,debian软件包(deb),rpm,freebsd,pacman,p5p,apk。
    • Windows:nsis(安装程序),nsis-web(Web安装程序),可移植(便携式但未安装的应用程序),AppX(Windows应用商店),Squirrel.Windows。
  • 将artifacts发布到GitHub Releases,Amazon S3,DigitalOcean Spaces和Bintray。
  • 高级构建:
  • Docker映像可在任何平台上构建适用于Linux或Windows的Electron应用程序。
  • 支持Proton Native
  • 无需设置即可自动下载所有必需的工具文件(例如,以代码签名Windows应用程序,制作AppX)。

    打包方式对比

    Electron-builder比Electron-packager功能更丰富,支持的平台更多,同时支持自动更新、非自动更新(自动更新需上传至git等支持平台),具有双package.json结构,通过两个package.json管理依赖项。一个用来管理开发依赖项,一个管理应用程序依赖项,最终打包时只打包应用程序依赖项。最重要的是:Electron-builder的打包体积相对Electron-packager较小。

    Electron应用版本更新

    Electron官方提供应用版本更新方式:update.electronjs.org、部署更新服务器、手动更新。

    update.electronjs.org

    update.electronjs.org是一个免费的开源网络服务,可以用来自动更新Electron应用。使用这个服务的Electron应用必须满足以下条件:

  • 运行在macOS或Windows

  • 源码托管在公开的github仓库
  • 编译的版本发布在github releases
  • 编译的版本已代码签名

使用这个服务最简单的方法是安装update-electron-app,一个预配置好的 Node.js 模块来使用 update.electronjs.org。在主进程中调用该模块,默认情况下这个模块会在应用启动的时候检查更新,然后每隔十分钟检查一次。当发现了一个更新,它会自动在后台下载。当下载完成后,会显示一个对话框以允许用户重启应用。如果需要定制化更新配置,可以将配置设置传递给update-electron-app或者直接使用更新服务

update.electronjs.org这种版本更新方式不适合私有项目,而且不兼容Linux

部署更新服务器

如果开发的Electron应用是个私有的项目,则需要搭建自己的更新服务器。
有两种开源的服务器可供选择:

  • electron-release-server– 提供一个用于处理发布的仪表板,并且不需要在GitHub Releases发布。
  • Nucleus– 一个由Atlassian维护的 Electron 应用程序的完整更新服务器。 支持多种应用程序和渠道; 使用静态文件存储来降低服务器成本.

    应用更新

    有了私有的服务器之后,接下来就需要在Electron应用中写一下应用更新逻辑了。
    官方推荐使用autoUpdater进行应用版本检测以及应用更新。autoUpdater只支持macOS和Windows平台,在Linux上没有内置的自动更新程序。

    手动处理应用版本更新(待实践验证)

    这是一个如何进行手动处理应用版本更新的示例
    结合有关Electron应用手动更新的博客文章,梳理一下手动更新的大致思路(以Windows为例):

  • 将Electron应用使用electron-builder打包之后,将图片中圈出来的文件放到静态资源服务器。

image.png

  • 客户端通过启动时检测及定时检测的方式检测是否有更新,主要是通过比较本地的package.json与远程服务器的package.json中的version信息判断是否需要更新,以及是需要全量更新还是增量更新(需要设计一下package.json中的版本号:比较版本号的第一位决定是否进行全量更新;比较版本号的第二位或第三位决定是否进行增量更新)
  • 检测到需要进行版本更新,如果需要增量更新:备份本地app目录,下载远程文件,将远程文件覆盖本地文件,全部覆盖完成后,刷新页面,完成升级;如果需要全量更新:使用第三方库electron-updater监听下载进度,下载服务器最新包覆盖安装更新