使用背景
使用vue打包的项目,放在electron生成的外壳中,当项目启动时检测软件有没有更新,如果有则从线上下载更新文件的压缩包,解压至本地,解压完之后删除安装包,然后项目重启
安装
因为是直接借用的外壳,还需要下载以下依赖
项目依赖:request , adm-zip
在此目录安装
JS
检测热更新的程序在主进程—main.js中
1.引入依赖
const fs = require('fs')
const request = require("request");
const adm_zip = require("adm-zip");
2.下载的文件保存路径
const baseUrl = "./resources/app/";
3.下载资源的路径 ( 这里需要为自己的资源外网)
const fileUrl = "http://xxx.xxx";
4.定时器轮询是否有新的安装包资源 (localVersion 为本地版本号,如果本地版本号和线上版本号不同则更新资源到本地)
const timer = setInterval(()=>{
return new Promise((resolve, reject) => {
request(
{
url: `${fileUrl}`,
},
(error, res, body) => {
try {
if (error || res.statusCode !== 200) {
return false
}
clearInterval(timer)
const localVersion = "1.1.6";
if (app.getVersion() != localVersion) {
dialog.showMessageBox({
type: 'info',
title: '发现新版本',
message: '请点击按钮进行更新,期间请不要操作,更新后会自动重启',
buttons: ['马上更新']
},(index) => {
if(index == 0){
downLoad()
.then(() => {
fs.readFile(`${baseUrl}package.json`, function (err, data) {
let newData = JSON.parse(data);
newData.version = localVersion;
fs.writeFile(`${baseUrl}package.json`, JSON.stringify(newData), function (err) {
if (err) {
return console.error(err);
}
// 重启
app.relaunch({
args: process.argv.slice(1)
});
app.exit(0);
});
});
})
}
})
} else {
console.log('no update')
}
} catch (err) {
reject(err);
}
})
})
},5000)
const downLoad = () => {
return new Promise((resolve, reject) => {
const stream = fs.createWriteStream(`${baseUrl}dist.zip`);
const url = 'http://ms.92td.cn/dist.zip';
request(url).pipe(stream).on('close', () => {
var adm_zip = require('adm-zip');
const unzip = new adm_zip(`${baseUrl}dist.zip`); //下载压缩更新包
unzip.extractAllTo(`${baseUrl}`, true); //解压替换本地文件
resolve()
fs.unlink(`${baseUrl}dist.zip`, (err) => {})
});
})
}