electron-updater 升级

最后更新于:2022-04-02 03:34:59

[TOC] > [安装](https://segmentfault.com/a/1190000012904543) **注意:mac上不签名也可以打包成功,但是涉及到自动更新等需要身份认证的功能则不能用,也不能发布到mac app store中。所以说经过代码签名的MAC包才是完整的包。我们这里一定是经过代码签名的完整包!切记!** ## 安装 `npm install electron-updater --save ` ## 技巧 1. 升级访问的url 参考格式 `https://raw.githubusercontent.com/idcpj/electron_demo/master/dist`, dist 有打包导出的目录决定 2. 项目中`dist` 下要有 `last.yml`的文件,用于查询是否更新 3. `dist`下要有`ele_demo-1.0.4.exe.blockmap` 格式的升级包,用于下载升级信息 ## demo 主进程 ``` const {ipcMain} = require('electron') const {autoUpdater} = require('electron-updater'); const uploadUrl=require('../../package.json').build.publish[0].url; // 检测更新,在你想要检查更新的时候执行,renderer事件触发后的操作自行编写 mainWindow = global.mainWindow // 通过main进程发送事件给renderer进程,提示更新信息 function sendUpdateMessage(text) { console.log(text); mainWindow.webContents.send('message', text) } exports.updateHandle=() =>{ let message = { error: '检查更新出错', checking: '正在检查更新……', updateAva: '检测到新版本,正在下载……', updateNotAva: '现在使用的就是最新版本,不用更新', }; autoUpdater.setFeedURL(uploadUrl); autoUpdater.on('error', function (error) { // console.log('===error==='); // console.log(error); sendUpdateMessage(message.error) }); autoUpdater.on('checking-for-update', function () { // console.log('===checking-for-update==='); sendUpdateMessage(message.checking) }); autoUpdater.on('update-available', function (info) { // console.log('===update-available==='); sendUpdateMessage(message.updateAva) }); autoUpdater.on('update-not-available', function (info) { // console.log('===update-not-available==='); sendUpdateMessage(message.updateNotAva) }); // 更新下载进度事件 autoUpdater.on('download-progress', function (progressObj) { // console.log('===download-progress==='); mainWindow.webContents.send('downloadProgress', progressObj) }) autoUpdater.on('update-downloaded', function (event, releaseNotes, releaseName, releaseDate, updateUrl, quitAndUpdate) { // console.log("==update-downloaded==="); ipcMain.on('isUpdateNow', (e, arg) => { // console.log("开始更新"); //some code here to handle event autoUpdater.quitAndInstall(); }); mainWindow.webContents.send('isUpdateNow') }); //接受更新指令 ipcMain.on("checkForUpdate",()=>{ // console.log("===checkForUpdate==="); //执行自动更新检查 autoUpdater.checkForUpdates(); }) } ``` 渲染进程 ``` const {ipcRenderer} = require('electron'); function update(){ //发送主进程触发更新指令 ipcRenderer.send("checkForUpdate"); ipcRenderer.on("message", (event, text) => { console.log("===message==="); document.querySelector('.show-txt').innerText=text; }); ipcRenderer.on("downloadProgress", (event, progressObj)=> { console.log("===downloadProgress==="); let downloadPercent = progressObj.percent || 0; document.querySelector('.show-percent').innerText= downloadPercent }); ipcRenderer.on("isUpdateNow", () => { console.log("===isUpdateNow==="); ipcRenderer.send("isUpdateNow"); }); } ```
';