electron热更新
概思路如下:
1、通过接口或者服务端的文件内容获取最新的版本;
2、判断最新版本是否与当前版本一致;
3、版本不一致的情况下(需更新)下载更新压缩包(接口或者第一步中的文件内容里面返回);
4、将压缩包解压并且覆盖本地文件;
第一步:通过接口的方式不赘述,如果获取的是json文件:
let http = require('http');
let fs = require('fs');
http.get(updateUrl, res => {
let code = res.statusCode;
if (code === 200) {
res.setEncoding("utf8");
let rawData = "";
res.on("data", function(chunk) {
rawData += chunk;
});
res.on("end", () => {
let content = new Buffer(JSON.parse(rawData).content, "base64");
let json = JSON.parse(content.toString());//请求到的文件内容
});
} else {
console.log(`请求失败,错误码:${code}`);
}
});
updateUrl是请求最新版本文件信息的地址,这里默认是json文件,
第二步,获取本地地址
const { remote } = require("electron");
var path = require("path");
var exePath = path.dirname(remote.app.getAppPath());
let jsonPath = exePath + "/app/package.json";
fs.readFile(jsonPath, (error, result) => {
var currVersion = JSON.parse(new Buffer(result, "base64")).version;//这是本地的版本
});
第三、四步:下载文件(zip格式)然后解压覆盖,注意如果用rar格式直接修改无效!!!!
//获取更新文件
downloadFile(file_url, targetPath) {
let that = this;
var received_bytes = 0;
var total_bytes = 0;
var req = request({
method: "GET",
url: file_url
});
var out = fs.createWriteStream(targetPath + "/app.zip");//生成文件
req.pipe(out);
req.on("response", function(data) {
total_bytes = parseInt(data.headers["content-length"]);
});
req.on("data", function(chunk) {
received_bytes += chunk.length;
//下载进度
that.percent = parseFloat(
((received_bytes / total_bytes) * 100).toFixed(0)
);
});
req.on("end", function() {
//下载成功,解压覆盖
let zip = new AdmZip(targetPath + "/app.zip");//解压文件
zip.extractAllToAsync(targetPath + "/", true, () => {
ipc.send("reload");//解压完成,提示主文件重启项目
});
});
}
file_url是下载的文件的地址,targetPath是覆盖的路径的地址
阅读 2.8k
3 声望
1 粉丝
0 条评论
得票最新