Skip to main content

Mise à jour d'une application

Il y a plusieurs méthodes pour mettre à jour une application Electron. La plus simple, et celle qui est officiellement supportée, tire parti de l'intégration du framework Squirrel et du module autoUpdater d'Electron.

Utilisation de update.electronjs.org

The Electron team maintains update.electronjs.org, a free and open-source webservice that Electron apps can use to self-update. Ce service est conçu pour les applications Electron répondant aux critères suivant:

  • L'application tourne sous macOs ou Windows
  • L'application a un répertoire GitHub public
  • Les livrables sont publiés en tant que release sous Github
  • Les livrables sont signés

La façon la plus simple d'utiliser ce service est d'installer update-electron-app, un module Node.js pré-configuré pour être utilisé avec update.electronjs.org.

Installer le module:

npm install update-electron-app

Déclenchez la mise à jour à partir du processus principal de votre application :

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

Par défaut, ce module vérifiera les mises à jour au démarrage de l'application, toutes les dix- minutes. Lorsqu’une mise à jour est trouvée, elle sera automatiquement téléchargée en arrière-plan. Une fois le téléchargement terminé, une boîte de dialogue s’affiche permettant à l’utilisateur de redémarrer l’application.

Si vous avez besoin personnaliser votre configuration, vous pouvez passer des paramètres à update-electron-app ou utiliser le service de mise à jour directement.

Déploiement d’un serveur de mise à jour

Si vous développez une application Electron privée, ou si vous ne publiez pas votre application sous GitHub, il peut être nécessaire de mettre en place votre propre serveur de mise à jour.

Selon vos besoins, vous pouvez choisir parmi l'un d'entre eux :

  • Hazel - Serveur de mise à jour pour les applications privées ou open source qui peuvent être déployées gratuitement sur Vercel. Cela récupère les releases GitHub et exploite la puissance du CDN de GitHub.
  • Nuts – Utilise aussi les releases GitHub, mais met en cache les mises à jour des applications sur le disque et prend en charge les dépôts privés.
  • electron-release-server – Fournit un tableau de bord pour la gestion des releases et n'exige pas que les releases soient créés sur GitHub.
  • Nucleus – Un serveur de mise à jour complet pour les applications Electron maintenues par Atlassian. Prend en charge plusieurs applications et canaux; utilise un magasin de fichiers statique pour minimiser le coût du serveur.

Implémentation des mises à jour dans votre application

Une fois que vous avez déployé votre serveur de mise à jour, continuez d'importer les modules requis dans votre code. Le code suivant peut varier pour les différents serveurs, mais il fonctionne comme décrit lors de l'utilisation de Hazel.

Important : Veuillez vous assurer que le code ci-dessous sera exécuté uniquement dans votre application empaquetée, et non dans la version en développement. Vous pouvez utiliser electron-is-dev pour vérifier l'environnement.

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

Ensuite, construisez l'URL du serveur de mise à jour et informez-en autoUpdater:

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

autoUpdater.setFeedURL({ url })

Comme dernière étape, vérifiez les mises à jour. L'exemple ci-dessous vérifiera chaque minute:

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

Une fois que votre application est empaquetée, elle recevra une mise à jour pour chaque nouvelle version GitHub que vous publierez.

Application des mises à jour

Maintenant que vous avez configuré le mécanisme de mise à jour de base de votre application, vous devez vous assurer que l’utilisateur sera notifié quand il y a une mise à jour. Cela peut être réalisé avec les événements de l'API autoUpdater:

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()
})
})

Assurez-vous également que les erreurs sont gérées. Voici un exemple pour les renvoyer sur stderr:

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

Gestion manuelle des mises à jour

Because the requests made by Auto Update aren't under your direct control, you may find situations that are difficult to handle (such as if the update server is behind authentication). The url field does support files, which means that with some effort, you can sidestep the server-communication aspect of the process. Here's an example of how this could work.