Electron应用使用electron-builder配合electron-updater实现自动更新(windows + mac)
最新博文地址:https://segmentfault.com/a/1190000012904543
发客户端一定要做的就是自动更新模块,否则每次版本升级都是一个头疼的事。
下面是Electron应用使用electron-builder配合electron-updater实现自动更新的解决方案。
1.安装 electron-updater 包模块
- npm install electron-updater --save
2.配置package.json文件
为了打包时生成latest.yml文件,需要在 build 参数中添加 publish 配置。
- "build": {
- "productName": "***",//隐藏软件名称
- "appId": "**",//隐藏appid
- "directories": {
- "output": "build"
- },
- "publish": [
- {
- "provider": "generic",
- "url": "http://**.**.**.**:3002/download/",//隐藏版本服务器地址
- }
- ],
- "files": [
- "dist/electron/**/*"
- ],
- "dmg": {
- "contents": [
- {
- "x": 410,
- "y": 150,
- "type": "link",
- "path": "/Applications"
- },
- {
- "x": 130,
- "y": 150,
- "type": "file"
- }
- ]
- },
- "mac": {
- "icon": "build/icons/icon.icns",
- "artifactName": "${productName}_setup_${version}.${ext}"
- },
- "win": {
- "icon": "build/icons/icon.ico",
- "artifactName": "${productName}_setup_${version}.${ext}"
- },
- "linux": {
- "icon": "build/icons",
- "artifactName": "${productName}_setup_${version}.${ext}"
- }
- }
注意:配置了publish才会生成latest.yml文件,用于自动更新的配置信息;
3.配置主进程main.js文件(或主进程main中的index.js文件),引入 electron-updater 文件,添加自动更新检测和事件监听:
注意:一定要是主进程main.js文件(或主进程main中的index.js文件),否则会报错。
- import { app, BrowserWindow, ipcMain } from 'electron'
- // 注意这个autoUpdater不是electron中的autoUpdater
- import { autoUpdater } from "electron-updater"
- import {uploadUrl} from "../renderer/config/config";
- // 检测更新,在你想要检查更新的时候执行,renderer事件触发后的操作自行编写
- function updateHandle() {
- let message = {
- error: '检查更新出错',
- checking: '正在检查更新……',
- updateAva: '检测到新版本,正在下载……',
- updateNotAva: '现在使用的就是最新版本,不用更新',
- };
- const os = require('os');
- autoUpdater.setFeedURL(uploadUrl);
- autoUpdater.on('error', function (error) {
- sendUpdateMessage(message.error)
- });
- autoUpdater.on('checking-for-update', function () {
- sendUpdateMessage(message.checking)
- });
- autoUpdater.on('update-available', function (info) {
- sendUpdateMessage(message.updateAva)
- });
- autoUpdater.on('update-not-available', function (info) {
- sendUpdateMessage(message.updateNotAva)
- });
- // 更新下载进度事件
- autoUpdater.on('download-progress', function (progressObj) {
- mainWindow.webContents.send('downloadProgress', progressObj)
- })
- autoUpdater.on('update-downloaded', function (event, releaseNotes, releaseName, releaseDate, updateUrl, quitAndUpdate) {
- ipcMain.on('isUpdateNow', (e, arg) => {
- console.log(arguments);
- console.log("开始更新");
- //some code here to handle event
- autoUpdater.quitAndInstall();
- });
- mainWindow.webContents.send('isUpdateNow')
- });
- ipcMain.on("checkForUpdate",()=>{
- //执行自动更新检查
- autoUpdater.checkForUpdates();
- })
- }
- // 通过main进程发送事件给renderer进程,提示更新信息
- function sendUpdateMessage(text) {
- mainWindow.webContents.send('message', text)
- }
4.在视图层中触发自动更新,并添加自动更新事件的监听。
触发自动更新:
- ipcRenderer.send("checkForUpdate");
监听自动更新事件:
- import { ipcRenderer } from "electron";
- ipcRenderer.on("message", (event, text) => {
- console.log(arguments);
- this.tips = text;
- });
- ipcRenderer.on("downloadProgress", (event, progressObj)=> {
- console.log(progressObj);
- this.downloadPercent = progressObj.percent || 0;
- });
- ipcRenderer.on("isUpdateNow", () => {
- ipcRenderer.send("isUpdateNow");
- });
为避免多次切换页面造成监听的滥用,切换页面前必须移除监听事件:
- //组件销毁前移除所有事件监听channel
- ipcRenderer.removeAll(["message", "downloadProgress", "isUpdateNow"]);//remove只能移除单个事件,单独封装removeAll移除所有事件
5.项目打包
执行electron-builder进行打包,windows下会生成安装包exe和latest.yml等文件,执行exe安装软件;Mac下会生成安装包dmg和latest-mac.yml文件,执行dmg安装软件。
windows打包生成文件:
Mac打包生成文件:
6.软件升级版本,修改package.json中的version属性,例如:改为 version: “1.1.0” (之前为1.0.0);
7.再次执行electron-builder打包,将新版本latest.yml文件和exe文件放到package.json中build -> publish中的url对应的地址下;
8.在应用中触发更新检查,electron-updater自动会通过对应url下的yml文件检查更新;
windows上自动更新示例:
mac上自动更新示例:
如果这篇文章对你的工作或者学习有帮助的话,请收藏或点个赞。如果对其中有什么不明白的或者报错,可以留言或者加QQ群140455228交流。
Electron应用使用electron-builder配合electron-updater实现自动更新(windows + mac)的更多相关文章
- Electron 桌面应用打包(npm run build)简述(windows + mac)
最近一段时间在用electron+vue做内部项目的一键构建发布系统的桌面应用,现就其中打包流程写个备注,以示记录. Windows环境打包:1.首先贴一下package.json. { " ...
- 【原创】从零开始搭建Electron+Vue+Webpack项目框架(五)预加载和Electron自动更新
导航: (一)Electron跑起来(二)从零搭建Vue全家桶+webpack项目框架(三)Electron+Vue+Webpack,联合调试整个项目(四)Electron配置润色(五)预加载及自动更 ...
- 【Electron】在 WSL2 中 打包 electron Linux 版本
[Electron]在 WSL2 中 打包 electron Linux 版本. 安装 WSL 我使用的是 Ubuntu 20.04.4 LTS 的版本. 安装 WSL 文档地址:https://do ...
- electron开发 - mac平台的打包和签名 - 针对electron-builder的自动更新
配合自动更新 - 安装包签名(mac)(待补充) 前提:实现自动更新需要签名 一.本地开发调试mac签名(无需具有权限的appple账号) 打开xcode,xcode -> preference ...
- Electron+React+七牛云 实战跨平台桌面应用(最新更新)
课程资料获取链接:点击这里 前市场上对 Electron 的呼声很高,它几乎是 Web 开发人员开发桌面客户端的唯一途径,很多大厂都使用 Electron 开发自己的原生应用.Electron 天生适 ...
- Electron 的解释, 什么是Electron
https://wizardforcel.gitbooks.io/electron-doc/content/development/build-instructions-windows.html
- Delphi及C++Builder经典图书一览表(持续更新中2018.01.02)
序号 书名 原版书名 作者 译者 出版社 页数 年代 定价 备注 1 C++Builder 5程序设计大全 C++Builder 5 Developer's Guide Jarrod Hollingw ...
- C++ Builder平台使用Indy9开发自动FTP程序01
Indy9与CB自带的Indy8不同处还是挺多的.首先就是图标变漂亮了,其次很多Method都重写了.它主要是依据Delph里的函数,力求与之相通.不同点在本系列的后续章节中会一一介绍. 在写ftp代 ...
- 使用VScode配合chrome实现网页自动刷新
1.使用插件:livereload 2.VScode商店中搜索上述插件安装 3.Chrome商店中搜素上述插件安装 并设置允许访问文件网址: 4.在两方插件都打开的情况下,VScode中按下ctrl+ ...
随机推荐
- spring官方学习地址
1.http://projects.spring.io/spring-framework/ 2.https://github.com/spring-projects/spring-mvc-showca ...
- linux数据库环境搭建
linux数据库源码下载地址:http://www3.sqlite.org/download.html 下载完成之后,把源码放到linux下的目录,我们一步一步来搭建环境: 1.使用命令解压源码包 u ...
- Machine Learning - week 1
Matrix 定义及基本运算 Transposing To "transpose" a matrix, swap the rows and columns. We put a &q ...
- CTF---密码学入门第二题 我喜欢培根
我喜欢培根分值:20 来源: Ph0enix 难度:中 参与人数:3449人 Get Flag:1410人 答题人数:1653人 解题通过率:85% key: CTF{} 解题链接: http://c ...
- Java面向对象抽象类案例分析
/** 雇员示例: 需求:公司中程序员有姓名,工号,薪水,工作内容 项目经理除了有姓名,工号,薪水还有奖金,工作内容 对给出需求进行数据建模 分析: 在这个问题领域中,先找出涉及的对象 通过名词提炼法 ...
- AtCoder Beginner Contest 069【A,水,B,水,C,数学,D,暴力】
A - K-City Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement In K-city, ...
- hdu_1034(模拟题)
很久没有打模拟题了,再次总结一下模拟题的做法: 仔细分析题意,弄清楚过程 理清楚模拟步骤,严格按照步骤编写代码 添加中间输出测试每步结果 虽然这是一个很简单的水题,但是没有松哥帮忙还是卡了很久,因为没 ...
- hbmy周赛1--E
E - Combination Lock Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I6 ...
- JXLS 2.4.0系列教程(一)——最简单的模板导出
Java中实现excel根据模板导出数据的方法有很多,一般简单的可以通过操作POI进行.还可以使用一些工具很轻松的实现模板导出.这些工具现在还在维护,而且做得比较好的国内的有easyPOI,国外的就是 ...
- [国嵌攻略][065][DM9000驱动程序设计]
移植代码:通过已有的可用的代码修改到新环境下运行. 代码编写: 初始化网卡 1.选中网卡 nLAN_CS BWSCON(0x48000000) DW4:01 16bit BANKCON4(0x4800 ...