Hay varias formas de actualizar una aplicación de Electron. El más fácil y con soporte oficial es aprovechar el Ardilla framework y el módulo autoUpdater de Electron.

Utilizando update.electronjs.org

El equipo de Electron mantiene update.electronjs.org, un servicio web gratuito y de código abierto que las aplicaciones de Electron pueden usar para autoactualizarse. El servicio está diseñado para aplicaciones de Electron que cumplen con los siguientes criterios:

  • La aplicación se ejecuta en macOS o Windows
  • La aplicación tiene un repositorio público de GitHub
  • Las compilaciones se publican en versiones de GitHub
  • Las compilaciones están firmadas con código

La forma más sencilla de utilizar este servicio es instalando actualización-aplicación-electrónica, un módulo de Node.js preconfigurado para su uso con update.electronjs.org.

Instale el módulo:

npm install update-electron-app

Invoque el actualizador desde el archivo de proceso principal de su aplicación:

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

De forma predeterminada, este módulo buscará actualizaciones al inicio de la aplicación y luego cada diez minutos. Cuando se encuentra una actualización, se descargará automáticamente en segundo plano. Cuando se completa la descarga, se muestra un cuadro de diálogo que permite al usuario reiniciar la aplicación.

Si necesita personalizar su configuración, puede pasar opciones a update-electron-app o utilizar el servicio de actualización directamente.

Implementación de un servidor de actualización

Si está desarrollando una aplicación privada de Electron, o si no está publicando lanzamientos en GitHub Releases, puede que sea necesario ejecutar su propio servidor de actualización.

Dependiendo de sus necesidades, puede elegir uno de estos:

  • Color avellana – Servidor de actualización para aplicaciones privadas o de código abierto que se pueden implementar de forma gratuita en Ahora. Tira de Lanzamientos de GitHub y aprovecha el poder de la CDN de GitHub.
  • Nueces – También utiliza Lanzamientos de GitHub, pero almacena en caché las actualizaciones de la aplicación en el disco y admite repositorios privados.
  • servidor de liberación de electrones – Proporciona un panel para manejar las versiones y no requiere que las versiones se originen en GitHub.
  • Núcleo – Un servidor de actualización completo para aplicaciones Electron mantenido por Atlassian. Admite múltiples aplicaciones y canales; usa un static almacenamiento de archivos para minimizar el costo del servidor.

Implementación de actualizaciones en su aplicación

Una vez que haya implementado su servidor de actualización, continúe importando los módulos requeridos en su código. El siguiente código puede variar para diferentes software de servidor, pero funciona como se describe al usar Color avellana.

Importante: Asegúrese de que el código siguiente solo se ejecute en su aplicación empaquetada y no en desarrollo. Puedes usar electron-is-dev para comprobar el medio ambiente.

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

A continuación, construya la URL del servidor de actualización y cuéntele a autoUpdater:

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

autoUpdater.setFeedURL( url )

Como paso final, busque actualizaciones. El siguiente ejemplo comprobará cada minuto:

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

Una vez empaquetada su aplicación, recibirá una actualización para cada nueva Lanzamiento de GitHub que publicas.

Aplicación de actualizaciones

Ahora que ha configurado el mecanismo de actualización básico para su aplicación, debe asegurarse de que el usuario reciba una notificación cuando haya una actualización. Esto se puede lograr utilizando los eventos de la 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()))

También asegúrese de que se estén manejando los errores. Aquí hay un ejemplo para registrarlos en stderr:

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

Manejo de actualizaciones manualmente

Debido a que las solicitudes realizadas por Actualización automática no están bajo su control directo, puede encontrar situaciones que sean difíciles de manejar (como si el servidor de actualización está detrás de la autenticación). los url field admite archivos, lo que significa que con un poco de esfuerzo, puede eludir el aspecto del proceso de comunicación con el servidor. Aquí hay un ejemplo de cómo podría funcionar esto.