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");
});
}
```
';