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 条评论
3 声望
1 粉丝
文章目录
宣传栏