electron-updater实现自动更新

electron-updater 是一个专为 Electron 应用设计的自动更新工具,能够帮助开发者轻松实现跨平台的自动更新功能。它支持 Windows、macOS 和 Linux 系统,通过简单的配置即可集成到 Electron 应用中,自动检查应用的最新版本并在后台完成更新。electron-updater 提供了灵活的更新策略,比如自动下载更新、静默安装,以及在下次启动时应用更新,从而确保用户始终使用最新版本的应用程序。

安装依赖

bash 复制代码
npm install electron-updater --save

配置 package.json

在 package.json 中添加 build 配置,指定更新服务器的地址:

bash 复制代码
{
  "build": {
    "nsis": {
      "allowElevation": true,
      "oneClick": false,
      "perMachine": true,
      "allowToChangeInstallationDirectory": true,
      "installerIcon": "build/icon.ico",
      "uninstallerIcon": "build/icon.ico",
      "createDesktopShortcut": true,
      "createStartMenuShortcut": true,
      "differentialPackage": false
    },
    "publish": [
      {
        "provider": "generic",
        "url": "http://your-update-server-url/",
        "useMultipleRangeRequest": false
      }
    ]
  }
}

这里的 url 是更新服务器地址,可以是本地服务器或远程服务器。

主进程代码

在主进程中配置 autoUpdater 模块,监听更新事件并处理更新逻辑:

javascript 复制代码
const { app, BrowserWindow } = require('electron');
const { autoUpdater } = require('electron-updater');

let mainWindow;

function createWindow() {
    mainWindow = new BrowserWindow({
        width: 800,
        height: 600,
        webPreferences: {
            nodeIntegration: true
        }
    });
    mainWindow.loadURL('http://localhost:9080');
}

autoUpdater.allowPrerelease = true;    //允许更新到预发布版本
autoUpdater.allowDowngrade = true;     //允许应用从高版本降级到低版本
autoUpdater.forceDevUpdateConfig = true;    //强制使用开发环境的更新配置
autoUpdater.useMultipleRangeRequest = false;    //是否使用多个范围请求(Range Requests)来下载更新包
autoUpdater.differentialPackage = false;        //是否使用差异更新包
autoUpdater.setFeedURL({
    provider: 'generic',
    url: 'http://your-update-server-url/'
});

// 配置自动更新
autoUpdater.on('checking-for-update', () => {
    console.log('Checking for updates...');
});

autoUpdater.on('update-available', () => {
    console.log('Update available');
});

autoUpdater.on('update-not-available', () => {
    console.log('No updates available');
});

autoUpdater.on('error', (error) => {
    console.error('Error in auto-updater', error);
});

autoUpdater.on('download-progress', (progressObj) => {
    console.log(`Download progress: ${progressObj.percent}%`);
});

autoUpdater.on('update-downloaded', (info) => {
    console.log('Update downloaded');
    autoUpdater.quitAndInstall();
});

app.whenReady().then(() => {
    createWindow();
    // 检查更新
    autoUpdater.checkForUpdates();
});

打包应用

使用 electron-builder 打包应用:

bash 复制代码
npm run build
electron-builder

这会生成一个 .exe 安装包以及相关的元数据文件(如 latest.yml),这些文件用于更新检测。

部署更新

将生成的 .exe 文件和 latest.yml 文件上传到更新服务器中。latest.yml 文件中包含版本信息,用于判断是否有新版本可用。

测试更新

安装生成的 .exe 文件后,启动应用。应用会自动检查更新,如果有新版本,会下载并提示用户重启以完成更新。

注意事项

  • 确保更新服务器的地址和配置正确。

  • 如果需要自定义更新逻辑,可以监听 autoUpdater 的事件并实现相应的处理。

  • 在开发环境中,可以通过模拟更新服务器来测试更新流程。

  • 生产环境:保持默认值(allowPrerelease = false,allowDowngrade = false)以确保稳定性。

  • 测试环境:启用 allowPrerelease = true 和 allowDowngrade = true 以方便测试。

  • 开发环境:启用 forceDevUpdateConfig = true 以调试更新流程。

相关推荐
程序员清洒1 小时前
Flutter for OpenHarmony:Text — 文本显示与样式控制
开发语言·javascript·flutter
雨季6662 小时前
Flutter 三端应用实战:OpenHarmony 简易“动态内边距调节器”交互模式深度解析
javascript·flutter·ui·交互·dart
会飞的战斗鸡2 小时前
JS中的链表(含leetcode例题)
javascript·leetcode·链表
方也_arkling3 小时前
别名路径联想提示。@/统一文件路径的配置
前端·javascript
qq_177767373 小时前
React Native鸿蒙跨平台剧集管理应用实现,包含主应用组件、剧集列表、分类筛选、搜索排序等功能模块
javascript·react native·react.js·交互·harmonyos
qq_177767373 小时前
React Native鸿蒙跨平台自定义复选框组件,通过样式数组实现选中/未选中状态的样式切换,使用链式调用替代样式数组,实现状态驱动的样式变化
javascript·react native·react.js·架构·ecmascript·harmonyos·媒体
web打印社区3 小时前
web-print-pdf:突破浏览器限制,实现专业级Web静默打印
前端·javascript·vue.js·electron·html
烬头88214 小时前
React Native鸿蒙跨平台采用了函数式组件的形式,通过 props 接收分类数据,使用 TouchableOpacity实现了点击交互效果
javascript·react native·react.js·ecmascript·交互·harmonyos
Amumu121384 小时前
Vuex介绍
前端·javascript·vue.js
2601_949809594 小时前
flutter_for_openharmony家庭相册app实战+相册详情实现
javascript·flutter·ajax