Aller au contenu principal

Mise à jour d'une application

Il existe plusieurs façons de fournir des mises à jour automatiques à votre application Electron. Le plus simple et officiellement supporté est de profiter du framework Squirrel intégré et du module Electron's autoUpdater.

Utilisation de update.electronjs.org

L'équipe GitHub d'Electron maintiens update.electronjs.org, un service web gratuit et open-source que les applications Electron peuvent utiliser pour se mettre à jour. 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 compilations sont publiées dans GitHub releases
  • Les builds ont leur code signé

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.

Installez le module en utilisant votre gestionnaire préféré de paquets Node.js:

npm install update-electron-app

Puis, appelez l'updater depuis le fichier du processus principal de votre application :

main.js
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 devez personnaliser votre configuration, vous pouvez passer des options à update-electron-app ou utiliser le service de mise à jour directement.

Utilisation d'autres services 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.

Etape n°1 : Déploiement d’un 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.

Une fois votre serveur de mise à jour déployé , vous pourrez utiliser le code de votre application pour recevoir et appliquer les mises à jour avec le module autoUpdater d'Electron.

Étape 2 : Réception des mises à jour dans votre application

Tout d'abord, importez les modules requis dans votre code de processus principal. Le code suivant devoir être modifié pour différents logiciels de serveur, mais il fonctionne comme décrit lors de l'utilisation de Hazel.

Vérifiez votre environnement d'exécution !

Veuillez vous assurer que le code ci-dessous ne sera exécuté que dans votre application empaquetée, et non en développement. Vous pouvez utiliser l'API app.isPackaged pour vérifier l'environnement.

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

Ensuite, construisez l'URL du flux du serveur de mise à jour et fournissez la à l' autoUpdater :

main.js
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:

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

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

Étape 3 : Notifier les utilisateurs lorsque des mises à jour sont disponibles

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. Ceci peut être réalisé en utilisant les événements de l'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 : nomrelease,
détail:
'Une nouvelle version a été téléchargée. Redémarrez l'application pour appliquer les mises à jour.'
}

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:

main.js
autoUpdater.on('error', (message) => {
console.error('There was a problem updating the application')
console.error(message)
})
Gestion manuelle des mises à jour

Puisque que les requêtes faites par la mise à jour automatique ne sont pas sous votre contrôle direct, vous pouvez vous trouver dans des situations difficiles à gérer (comme lorsque le serveur de mise à jour est protégé par une authentification). Le champ url supporte le protocole file:// , ce qui signifie qu'avec un peu d'effort, vous pouvez contourner l'aspect communication avec le serveur du processus en chargeant votre mise à jour depuis un répertoire local. Voici un exemple expliquant comment cela pourrait fonctionner.