• 更新应用程序
    • 使用 update.electronjs.org
    • 使用 electron-builder
    • 部署更新服务器
    • 在你的应用中实施更新
    • 应用更新

    更新应用程序

    有多种方法可以更新Electron应用. 最简单并且获得官方支持的方法是利用内置的Squirrel框架和Electron的autoUpdater模块。

    使用 update.electronjs.org

    GitHub 的 Electron 团队维护 update.electronjs.org,一个免费开源的网络服务,可以让 Electron 应用使用自动更新。 The service is designed for Electron apps that meet the following criteria:

    • 应用运行在 macOS 或者 Windows
    • 应用有公开的 GitHub 仓库
    • 编译的版本发布在 GitHub Releases
    • 编译已代码签名最简单的使用这个服务是安装 update-electron-app,一个预配置好的 Node.js 模块来使用 update.electronjs.org。

    安装模块

    1. npm install update-electron-app

    从你的应用的 main process 文件调用这个更新:

    1. require('update-electron-app')()

    By default, this module will check for updates at app startup, then every ten minutes. 当发现了一个更新,它会自动在后台下载。 When the download completes, a dialog is displayed allowing the user to restart the app.

    If you need to customize your configuration, you can pass options to update-electron-app or use the update service directly.

    使用 electron-builder

    如果你的app是通过electron-builder打包那么你可以使用electron-updater模块, 它不依赖任何服务器并且可以从S3, GitHub或者任何其它静态文件存储更新. 这避开了 Electron 内置的更新机制,这意味着本文档的其余部分不适用于此 electron-builder的更新程序。

    部署更新服务器

    If you're developing a private Electron application, or if you're not publishing releases to GitHub Releases, it may be necessary to run your own update server.

    根据你的需要,你可以从下方选择:

    • Hazel – 用于私人或开源应用的更新服务器,可以在 Now 上免费部署。 它从GitHub Releases中拉取更新文件,并且利用 GitHub CDN 的强大性能。
    • Nuts-同样使用GitHub Releases, 但得在磁盘上缓存应用程序更新并支持私有存储库.
    • electron-release-server – 提供一个用于处理发布的仪表板,并且不需要在GitHub上发布发布。
    • Nucleus – 一个由Atlassian维护的 Electron 应用程序的完整更新服务器。 支持多种应用程序和渠道; 使用静态文件存储来降低服务器成本.

    在你的应用中实施更新

    一旦你部署了更新服务器, 继续导入你所需要的代码模块. 下列代码可能因不同的服务器软件而变化, but it works like described when using Hazel.

    重要: 请确保下面的代码只在打包的应用程序, 而不是开发中. 你可以使用electron-is-dev检查当前环境.

    1. const { app, autoUpdater, dialog } = require('electron')

    下一步, 构建更新服务器的URL并且通知autoUpdater:

    1. const server = 'https://your-deployment-url.com'
    2. const feed = `${server}/update/${process.platform}/${app.getVersion()}`
    3. autoUpdater.setFeedURL(feed)

    最后一步, 检查更新. 下面的例子将每分钟检查一次:

    1. setInterval(() => {
    2. autoUpdater.checkForUpdates()
    3. }, 60000)

    应用程序被packaged后, 它将接收你每次发布在GitHub Release上的的更新。

    应用更新

    现在您已经为应用程序配置了基本的更新机制, 您需要确保在更新时通知用户. 这可以使用autoUpdater API events来实现:

    1. autoUpdater.on('update-downloaded', (event, releaseNotes, releaseName) => {
    2. const dialogOpts = {
    3. type: 'info',
    4. buttons: ['Restart', 'Later'],
    5. title: 'Application Update',
    6. message: process.platform === 'win32' ? releaseNotes : releaseName,
    7. detail: 'A new version has been downloaded. Restart the application to apply the updates.'
    8. }
    9. dialog.showMessageBox(dialogOpts, (response) => {
    10. if (response === 0) autoUpdater.quitAndInstall()
    11. })
    12. })

    同时要确保错误被being handled. 这是一个例子它将记录到stderr:

    1. autoUpdater.on('error', message => {
    2. console.error('There was a problem updating the application')
    3. console.error(message)
    4. })