Spec-Zone.ru › Electron

Обновление приложений

Существует несколько способов обеспечить автоматические обновления вашего приложения Electron. Самый простой и официально поддерживаемый способ — использование встроенного фреймворка Squirrel и модуля autoUpdater Electron.

Использование update.electronjs.org​

Команда Electron поддерживает update.electronjs.org, бесплатную и открытую веб-службу, которую могут использовать приложения Electron для самостоятельного обновления. Сервис предназначен для приложений Electron, отвечающих следующим критериям:

  • Приложение работает на macOS или Windows
  • Приложение имеет общедоступный репозиторий GitHub
  • Сборки опубликованы в GitHub Releases
  • Сборки подписаны кодом

Самый простой способ использовать эту службу — установить update-electron-app, модуль Node.js, предварительно настроенный для работы с update.electronjs.org.

Установите модуль с помощью менеджера пакетов Node.js по вашему выбору:

  • npm
  • Yarn
npm install update-electron-app
yarn add update-electron-app

Затем вызовите обновлитель из файла основного процесса вашего приложения:

main.js
require('update-electron-app')()

По умолчанию этот модуль будет проверять наличие обновлений при запуске приложения, а затем каждые десять минут. При обнаружении обновления оно будет автоматически загружено в фоновом режиме. По завершении загрузки будет отображаться диалоговое окно, позволяющее пользователю перезапустить приложение.

Если вам нужно настроить конфигурацию, вы можете передать параметры update-electron-app или непосредственно использовать службу обновления.

Использование других сервисов обновления​

Если вы разрабатываете закрытое приложение Electron или не публикуете релизы в GitHub Releases, возможно, потребуется запустить собственный сервер обновления.

Шаг 1: Развертывание сервера обновления​

В зависимости от ваших потребностей вы можете выбрать один из этих вариантов:

  • Hazel — Сервер обновления для частных или открытых приложений, который можно бесплатно развернуть на Vercel. Он получает данные из GitHub Releases и использует возможности кэширования CDN GitHub.
  • Nuts — Также использует GitHub Releases, но кэширует обновления приложений на диске и поддерживает закрытые репозитории.
  • electron-release-server — Предоставляет панель управления для управления выпусками и не требует, чтобы релизы исходили из GitHub.
  • Nucleus — Полный сервер обновлений для приложений Electron, поддерживаемый Atlassian. Поддерживает несколько приложений и каналов; использует хранилище статических файлов для минимизации затрат на сервер.

После развертывания сервера обновления вы можете добавить в свой код приложения средства получения и применения обновлений с помощью модуля [autoUpdater] Electron.

Шаг 2: Получение обновлений в вашем приложении​

Сначала импортируйте необходимые модули в код основного процесса. Следующий код может отличаться для разных программного обеспечения сервера, но он работает так, как описано, при использовании Hazel.

Проверьте среду выполнения!

Убедитесь, что код ниже будет выполняться только в упакованном приложении, а не в режиме разработки. Вы можете использовать API app.isPackaged для проверки среды.

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

Далее, сформируйте URL-адрес ленты сервера обновления и сообщите об этом autoUpdater:

main.js
const server = 'https://your-deployment-url.com'
const url = `${server}/update/${process.platform}/${app.getVersion()}`

autoUpdater.setFeedURL({ url })

На последнем шаге проверьте наличие обновлений. Приведенный ниже пример будет проверять каждые минуту:

main.js
setInterval(() => {
  autoUpdater.checkForUpdates()
}, 60000)

После того, как ваше приложение упаковано, оно будет получать обновление для каждого нового GitHub Release, который вы опубликуете.

Шаг 3: Уведомление пользователей о наличии обновлений​

Теперь, когда вы настроите базовый механизм обновления для приложения, вам нужно убедиться, что пользователь будет уведомлен о наличии обновления. Это можно сделать, используя события API autoUpdater:

main.js
autoUpdater.on('update-downloaded', (event, releaseNotes, releaseName) => {
  const dialogOpts = {
    type: 'info',
    buttons: ['Restart', 'Later'],
    title: 'Application Update',
    message: process.platform === 'win32' ? releaseNotes : releaseName,
    detail:
      'A new version has been downloaded. Restart the application to apply the updates.',
  }

  dialog.showMessageBox(dialogOpts).then((returnValue) => {
    if (returnValue.response === 0) autoUpdater.quitAndInstall()
  })
})

Также убедитесь, что обрабатываются ошибки. Вот пример их регистрации в stderr:

main.js
autoUpdater.on('error', (message) => {
  console.error('There was a problem updating the application')
  console.error(message)
})
Обработка обновлений вручную

Поскольку запросы, выполняемые autoUpdate, не находятся под вашим прямым контролем, могут возникнуть ситуации, которые сложно обработать (например, если сервер обновления защищен аутентификацией). Поле url поддерживает протокол file://, что означает, что при определенных усилиях вы можете обойти аспект связи с сервером в процессе, загрузив обновление из локального каталога. Вот пример того, как это можно сделать.

© GitHub Inc.
Licensed under the MIT license.
https://www.electronjs.org/docs/latest/tutorial/updates

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API