Aller directement au contenu principal
Retour aux plugins
@capgo/electron-updater
Tutoriel
par github.com/Cap-go

Mise à jour OTA en temps réel pour les applications Electron avec la même surface que __CAPGO_KEEP_1__-updater

OTA live updates for Electron apps with the same API surface as capacitor-updater

Guide

Tutoriel sur l'actualisation Electron

En utilisant @capgo/electron-updater

@capgo/electron-updater gives Electron apps the same Capgo live-update model as @capgo/capacitor-updater Vous l'initialisez dans le processus principal, exposez le pont de rendu à travers preload, et appelez notifyAppReady() à chaque lancement afin que la protection de rollback sache que le bundle est sain.

Installation

bun add @capgo/electron-updater

Configuration du processus principal

import { app, BrowserWindow } from 'electron';
import path from 'node:path';
import { ElectronUpdater, setupEventForwarding, setupIPCHandlers } from '@capgo/electron-updater';

const updater = new ElectronUpdater({
  appId: 'com.example.desktop',
  autoUpdate: true,
});

app.whenReady().then(async () => {
  const window = new BrowserWindow({
    webPreferences: {
      preload: path.join(__dirname, 'preload.js'),
      contextIsolation: true,
    },
  });

  const builtinPath = path.join(__dirname, 'www/index.html');
  await updater.initialize(window, builtinPath);
  setupIPCHandlers(updater);
  setupEventForwarding(updater, window);

  await window.loadFile(updater.getCurrentBundlePath());
});

Pont de préchargement

import { exposeUpdaterAPI } from '@capgo/electron-updater/preload';

exposeUpdaterAPI();

Utilisation du rendu

import { requireUpdater } from '@capgo/electron-updater/renderer';

const updater = requireUpdater();

await updater.notifyAppReady();

const latest = await updater.getLatest();

if (latest.url && !latest.error) {
  const bundle = await updater.download({
    url: latest.url,
    version: latest.version,
    checksum: latest.checksum,
  });

  await updater.next({ id: bundle.id });
}

Écoutez les événements de mise à jour

updater.addListener('download', ({ percent }) => {
  console.log('Download progress', percent);
});

updater.addListener('updateFailed', ({ bundle }) => {
  console.error('Update failed', bundle.version);
});

Déployez un nouveau bundle

bun run build
bunx @capgo/cli@latest bundle upload --channel=production

Conseils pratiques

  • Appelez toujours notifyAppReady() tôt dans le rendu afin que la protection de rollback fonctionne comme prévu.
  • Conservez la voie de construction intégrée stable et laissez le metteur à jour décider de charger le bundle embarqué ou un téléchargé.
  • Réutilisez le même canal et le modèle de déploiement Capgo que vous utilisez déjà sur mobile lorsque votre application Electron partage une pipeline de mise à jour de backend.

Continuez à partir de l'utilisation de @capgo/electron-updater

Si vous utilisez L'utilisation de @capgo/electron-updater pour planifier le travail de plugin natif, connectez-le à @capgo/electron-updater pour les détails d'implémentation dans @capgo/electron-updater, Démarrage avec Electron Updater pour les détails d'implémentation dans Démarrage avec Electron Updater, Capgo Répertoire de plugins pour le flux de travail du produit dans Capgo Répertoire de plugins, Capacitor Plugins par Capgo pour les détails d'implémentation dans Capacitor Plugins par Capgo, et Ajouter ou Mettre à Jour les Plugins pour le détail d'implémentation dans Ajouter ou Mettre à Jour les Plugins.