Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Автообновление

Автообновление — проверка новой версии при запуске, загрузка её в фоне и установка при следующем перезапуске. Без него пользователи годами сидят на старой версии с ошибками и уязвимостями. В Electron для этого нужны две части: место, где лежат новые версии, и код в программе, который их проверяет.

Как это устроено

  1. Вы увеличиваете version в package.json и собираете программу.
  2. Сборка публикуется на сервер обновлений, например в GitHub Releases.
  3. Установленная программа спрашивает сервер, нет ли версии новее.
  4. Если есть, скачивает её и предлагает перезапуститься.

Встроенный модуль Electron autoUpdater работает в Windows (с установщиком Squirrel) и в macOS. В Linux обновления обычно доставляет менеджер пакетов системы.

Публикация на GitHub

Forge публикует сборки через издателей (publishers). Для GitHub:

npm install --save-dev @electron-forge/publisher-github
// forge.config.js
module.exports = {
  publishers: [
    {
      name: '@electron-forge/publisher-github',
      config: {
        repository: { owner: 'anna', name: 'notes' },
        prerelease: false,
      },
    },
  ],
};

Команда npm run publish соберёт установщики и загрузит их в новый релиз репозитория anna/notes. Для доступа к GitHub нужен токен в переменной окружения GITHUB_TOKEN.

Проверка обновлений

Для программ с открытым кодом на GitHub есть бесплатный сервис update.electronjs.org и модуль для него:

npm install update-electron-app
// main.js
const { updateElectronApp } = require('update-electron-app');
 
updateElectronApp();

Модуль читает адрес репозитория из поля repository в package.json, проверяет обновления при запуске и затем периодически. Когда новая версия скачана, он показывает диалог с предложением перезапустить программу.

Встроенный autoUpdater

Если сервер обновлений свой, используют модуль autoUpdater напрямую:

// main.js
const { autoUpdater } = require('electron');
 
autoUpdater.setFeedURL({ url: 'https://updates.example.com/notes' });
 
autoUpdater.on('update-downloaded', () => {
  autoUpdater.quitAndInstall();
});
 
autoUpdater.checkForUpdates();

update-downloaded срабатывает, когда новая версия скачана, а quitAndInstall перезапускает программу уже обновлённой. Обычно перед этим спрашивают пользователя через dialog.showMessageBox.

Другие варианты

Инструмент electron-builder — альтернатива Forge для сборки — имеет свой модуль обновлений electron-updater. Он поддерживает больше форматов, в том числе AppImage для Linux. Смешивать его с Forge не нужно: выбирают один инструмент.

Частая ошибка

Обновления не проверяются при запуске через npm start: модули обновления работают только в собранной и установленной программе, а в macOS — ещё и только в подписанной. Проверяйте автообновление на настоящих сборках: установите версию 1.0.0, опубликуйте 1.0.1 и запустите установленную программу.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.