试用了下,electron 自带的热更新 并不是特别理想。

想自己处理下载更新文件。刚好看到了网上有一个比较好的处理方式。试了下效果还可以。

使用以下命令将此库包含在项目中:

npm install request

在脚本的顶部声明基本依赖项。

var request = require('request');
var fs = require('fs');

将GET数据流式传输到文件输出。 

function downloadFile(file_url , targetPath){
// Save variable to know progress
var received_bytes = 0;
var total_bytes = 0; var req = request({
method: 'GET',
uri: file_url
}); var out = fs.createWriteStream(targetPath);
req.pipe(out); req.on('response', function ( data ) {
// Change the total bytes value to get progress later.
total_bytes = parseInt(data.headers['content-length' ]);
}); req.on('data', function(chunk) {
// Update the received bytes
received_bytes += chunk.length; showProgress(received_bytes, total_bytes);
}); req.on('end', function() {
alert("File succesfully downloaded");
});
} function showProgress(received,total){
var percentage = (received * 100) / total;
console.log(percentage + "% | " + received + " bytes out of " + total + " bytes.");
}  

使用方式:

downloadFile("http://www.planwallpaper.com/static/images/butterfly-wallpaper.jpeg", "./butterfly-wallpaper.jpeg");  

用promise实现的方式:

/**
* Promise based download file method
*/
function downloadFile(configuration){
return new Promise(function(resolve, reject){
// Save variable to know progress
var received_bytes = 0;
var total_bytes = 0; var req = request({
method: 'GET',
uri: configuration.remoteFile
}); var out = fs.createWriteStream(configuration.localFile);
req.pipe(out); req.on('response', function ( data ) {
// Change the total bytes value to get progress later.
total_bytes = parseInt(data.headers['content-length' ]);
}); // Get progress if callback exists
if(configuration.hasOwnProperty("onProgress")){
req.on('data', function(chunk) {
// Update the received bytes
received_bytes += chunk.length; configuration.onProgress(received_bytes, total_bytes);
});
}else{
req.on('data', function(chunk) {
// Update the received bytes
received_bytes += chunk.length;
});
} req.on('end', function() {
resolve();
});
});
}  

使用方式:

downloadFile({
remoteFile: "http://www.planwallpaper.com/static/images/butterfly-wallpaper.jpeg",
localFile: "/var/www/downloads/butterfly-wallpaper.jpeg",
onProgress: function (received,total){
var percentage = (received * 100) / total;
console.log(percentage + "% | " + received + " bytes out of " + total + " bytes.");
}
}).then(function(){
alert("File succesfully downloaded");
});  

还有一步 是对zip 包进行解压 然后 替换本地文件,删除这个更新的压缩包  就完成了热更新。

我是再渲染线程 进行判断版本的:

判断是否需要强制更新,如果不强制更新的版本都用热更新 去下载 替换本地文件就可以了

function UpdateApp() {
$.ajax({
type: "GET",
url: baseDevUrl + CLIENTUPDATES + '?OS=' + getPlatformName(),
headers: {
Authorization: 'Bearer ' + getAccessToken(),
Accept: "application/json; charset=utf-8",
},
success: function (res) {
console.log(res.data[])
if (res.data[]&&res.data[].version != version) {
console.log('进行强制更新');
$(".myDialog-box").show();
$(".myDialog-box").click((event)=>{
return event.preventDefault();
})
$(".headerEndDiv").addClass('disClick');
$('#btn-dialogBox').dialogBox({
hasClose: true,
hasBtn: true,
confirmValue: '去更新',
confirm: function () {
console.log('this is callback function');
shell.openExternal(res.data[].download_url);
ipcRenderer.send('window-close');
},
cancelValue: '取消',
cancel: function () {
toast("请更新到最新版本..");
return true;
},
title: res.data[].title,
content: res.data[].content
});
}
},
error: function (msg) {
var rss = $(msg.responseText);
console.log(rss)
}
});
}
												

electron 热更新的更多相关文章

  1. electron热更新与windows下的安装包

    帮朋友公司做了点东西,他说有很多bug,我一看,基本问题都是浏览器兼容引起的,而electron内带Chromium内核,正好一直想尝试下electron,所以研究了一波.这里只是简单的使用elect ...

  2. 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新

    本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...

  3. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

  4. 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新

    上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...

  5. iOS热更新-8种实现方式

    一.JSPatch 热更新时,从服务器拉去js脚本.理论上可以修改和新建所有的模块,但是不建议这样做. 建议 用来做紧急的小需求和 修复严重的线上bug. 二.lua脚本 比如: wax.热更新时,从 ...

  6. 【.net 深呼吸】程序集的热更新

    当一个程序集被加载使用的时候,出于数据的完整性和安全性考虑,程序集文件(在99.9998%的情况下是.dll文件)会被锁定,如果此时你想更新程序集(实际上是替换dll文件),是不可以操作的,这时你得把 ...

  7. 谁偷了我的热更新?Mono,JIT,iOS

    前言 由于匹夫本人是做游戏开发工作的,所以平时也会加一些玩家的群.而一些困扰玩家的问题,同样也困扰着我们这些手机游戏开发者.这不最近匹夫看自己加的一些群,常常会有人问为啥这个游戏一更新就要重新下载,而 ...

  8. ReactNative 告别CodePush,自建热更新版本升级环境

    微软的CodePush热更新非常难用大家都知道,速度跟被墙了没什么区别. 另外一方面,我们不希望把代码放到别人的服务器.自己写接口更新总归感觉安全一点. so,就来自己搞个React-Native A ...

  9. ReactNative 使用微软的CodePush进行热更新,继续填坑

    1.别被开发环境骗了 在我们开发react native的时候,一键运行工程,js改了,只要cmd+R就可以刷新了.然后会轻易以为真正app上线的时候也是一样,只要app一打开就是最新的. 其实!这是 ...

随机推荐

  1. odoo10源码 windows环境安装

    odoo10-windows开发环境(源码安装) 安装node 下载地址 http://nodejs.cn/download/ 安装教程https://www.cnblogs.com/zhouyu20 ...

  2. 在access转sql server指定的转换无效

    今天继续昨天没解决的问题,还是继续报错数据库中“指定的转换无效”,看着这个错误都有点头大了,啊啊啊啊,因为无法再代码中寻找到具体点,只好在晚上继续查询 最后终于看到一条帖子说在转换的时候可能出现数据冲 ...

  3. Spring Boot报错 MultipartException The temporary upload...

    Spring Boot报错:尤其是在处理Ribbon这类接口调用型的负载均衡组件,常见问题 ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - Servlet.se ...

  4. Keepalived配置详解

    Keepalived 配置文件解释 Keepalived的所有配置都在一个配置文件里面,主要分为三类: 全局配置 VRRPD配置 LVS 配置 配置文件是以配置块的形式存在,每个配置块都在一个闭合的{ ...

  5. Linux安装NodeJS

    Linux中安装nodejs 去官网下载和自己系统匹配的文件: 英文网址:https://nodejs.org/en/download/ 中文网址:http://nodejs.cn/download/ ...

  6. SDOI2019游记

    Day0 一大早就起床,结果忙活了整整一上午. 12:20从gryz出发,路上发现把耳机和笔忘另一个背包里了(都怪老爸非得让我换背包),15:30差不多就到山师了. 山师也是蛮漂亮的,花开得挺好.到处 ...

  7. BZOJ2287 消失之物

    这题貌似是个权限题qwq,我是用离线题库+本地数据包测的 题目大意: 给你\(n\)个体积分别为\(w[i]\)的物品和容积\(m\),问你将每一件物品分别去掉之后,拼出\(1\)~\(m\)中每一个 ...

  8. pandas技巧两则——列内元素统计和列内元素排序

    更新:后来忽然发现有个cumcount()函数,支持正排倒排,所以以下说的那些基本都没啥用了. 最近做比赛线上无甚进展,所以先小小地总结遇到的一些困难和解决的方法,以防之后忘记.毕竟总是忙着大步赶路的 ...

  9. 实时通讯系列目录篇之SignalR详解

    一. 简单说几句 最早使用SignalR的时候大约是两年前了,记得当时是一个OA中消息的实时提醒,轮询的方式有点耗资源,WebSocket写起来又比较麻烦,最终选择了SignalR,当时是什么版本已经 ...

  10. jquery 中 this 的范围

    jquery 中的 this button 通常会存在  onclick;// input[type='file'] 会存在 onchange 事件 eg:  onclick = " del ...