electron 热更新
试用了下,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 热更新的更多相关文章
- electron热更新与windows下的安装包
帮朋友公司做了点东西,他说有很多bug,我一看,基本问题都是浏览器兼容引起的,而electron内带Chromium内核,正好一直想尝试下electron,所以研究了一波.这里只是简单的使用elect ...
- 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新
本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...
- 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
[原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...
- 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新
上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...
- iOS热更新-8种实现方式
一.JSPatch 热更新时,从服务器拉去js脚本.理论上可以修改和新建所有的模块,但是不建议这样做. 建议 用来做紧急的小需求和 修复严重的线上bug. 二.lua脚本 比如: wax.热更新时,从 ...
- 【.net 深呼吸】程序集的热更新
当一个程序集被加载使用的时候,出于数据的完整性和安全性考虑,程序集文件(在99.9998%的情况下是.dll文件)会被锁定,如果此时你想更新程序集(实际上是替换dll文件),是不可以操作的,这时你得把 ...
- 谁偷了我的热更新?Mono,JIT,iOS
前言 由于匹夫本人是做游戏开发工作的,所以平时也会加一些玩家的群.而一些困扰玩家的问题,同样也困扰着我们这些手机游戏开发者.这不最近匹夫看自己加的一些群,常常会有人问为啥这个游戏一更新就要重新下载,而 ...
- ReactNative 告别CodePush,自建热更新版本升级环境
微软的CodePush热更新非常难用大家都知道,速度跟被墙了没什么区别. 另外一方面,我们不希望把代码放到别人的服务器.自己写接口更新总归感觉安全一点. so,就来自己搞个React-Native A ...
- ReactNative 使用微软的CodePush进行热更新,继续填坑
1.别被开发环境骗了 在我们开发react native的时候,一键运行工程,js改了,只要cmd+R就可以刷新了.然后会轻易以为真正app上线的时候也是一样,只要app一打开就是最新的. 其实!这是 ...
随机推荐
- git 远程新建分支后,本地查看不到
使用以下命令同步 git remote # 列出所有远程主机git remote update origin --prune # 更新远程主机origin 整理分支git branch -r # 列出 ...
- Educational Codeforces Round 63 Div. 2
A:找到两个相邻字符使后者小于前者即可. #include<bits/stdc++.h> using namespace std; #define ll long long #define ...
- windows下的vimrc
很奇怪的事...不会解释 建议编译位置第一次设置为 map <F9> :call CR()<CR>func! CR()exec "w"exec " ...
- 【学习笔记】JS知识点整理
1 原型/原型链 1-1 原型 定义:原型是function对象的一个属性,定义了构造函数制造出的对象的公共祖先.通过该构造函数产生的对象,可以继承该原型的属性和方法. 原型是一个对象. 可以利用原型 ...
- Ceph rdb
Ceph 独一无二地用统一的系统提供了对象.块.和文件存储功能,它可靠性高.管理简便.并且是自由软件. Ceph 的强大足以改变公司的 IT 基础架构.和管理海量数据. Ceph 可提供极大的伸缩性— ...
- SQL随记(六)
1.关于dbms_sql包的一些执行语句 cursor_name := DBMS_SQL.OPEN_CURSOR; --打开游标: DBMS_SQL.PARSE(cursor_name, var_dd ...
- slickedit编译调试linux应用程序
目录 slickedit编译调试linux应用程序 工程建立 编译 智能报错跳转 配置编译环境 调试 title: slickedit编译调试linux应用程序 date: 2019/3/19 17: ...
- Shell中的算数运算
加法 echo $((a+b)) expr $a + $b let "a=1+2";echo $a a=;let "a+=10";echo $a echo &q ...
- vscode中文配置说明
1.官网下载vscode安装完毕后, 2.在扩展中搜索chinese,选择:“Chinese (Simplified) Language Pack for Visual Studio Code” 3. ...
- DirectX11--实现一个3D魔方(1)
前言 可以说,魔方跟我的人生也有一定的联系. 在高中的学校接触到了魔方社,那时候的我虽然也能够还原魔方,可看到大神们总是可以非常快地还原,为此我也走上了学习高级公式CFOP的坑.当初学习的网站是在魔方 ...