文档章节

node webkit (nw.js) 设置自动更新

会飞的Tiger
 会飞的Tiger
发布于 2016/12/08 17:57
字数 1141
阅读 184
收藏 3
点赞 0
评论 1

原理:把更新的文件放在服务器上,设置一个客户端版本号,通过接口获取服务器上的版本,如果高于本地的版本就下载服务器上的代码,低于或等于就不更新

代码如下:

 

<script>
        var http = require('http');
        var fs = require('fs');
        var request = require('request');
        var unzip = require('unzip2');
        var Driver = function () {
            this.timer = '';
            this.timer2 = '';
        };
        Driver.prototype = {
                /* 读取本地版本 */
                readFile: function () {
                    var self = this;
                    if (fs.existsSync('src/js/global.js')) {                
                        self.case1();
                    } else {
                        $.ajax({
                            type: 'post',
                            url: 'url(接口地址)',
                            dataType: 'jsonp',
                            contentType: "application/jsonp; charset=utf-8",
                            data: {'userId': 0,
                            },
                            success: function (data) {
                                console.log("正在下载解压包...");
                                if (data.code == 0) {
                                    if (data.result.update == 1) {
                                        var gx = document.getElementsByClassName('gx')[0];
                                        gx.style.display = "block";
                                        /* 下载地址 下载到的目录*/
                                        if (fs.existsSync('nsrc') || fs.existsSync('upload/zip')) {
                                            self.rmdirFile('upload/zip', function () {

                                                self.rmdirFile('nsrc', function () {

                                                    self.createDir('upload/zip', function () {
                                                        console.log("创建下载zip目录成功...");
                                                        //创建下载zip的目录
                                                        self.downFile(data.result.url);
                                                    });
                                                })
                                            })
                                        } else {
                                            self.createDir('upload/zip', function () {
                                                console.log("创建下载zip目录成功...");
                                                //创建下载zip的目录
                                                self.downFile(data.result.url);
                                            });
                                        }
                                    } else {
                                        setTimeout(function () {
                                            window.location.href = "../src/Login/login.html";
                                        }, 2250);
                                    }
                                }
                            },
                            error: function () {

                                alert(data.msg);

                            }

                        });

                    }
                },
                /* 如果global没有被删除*/
                case1: function () {
                    var self = this;
                    global.post('/system/checkVersion', {}, function (data) {
                        console.log("正在下载解压包...");
                        if (data.code == 0) {
                            if (data.result.update == 1) {
                                var gx = document.getElementsByClassName('gx')[0];
                                gx.style.display = "block";
                                /* 下载地址 下载到的目录*/
                                if (fs.existsSync('nsrc') || fs.existsSync('upload/zip')) {
                                    self.rmdirFile('upload/zip', function () {

                                        self.rmdirFile('nsrc', function () {

                                            self.createDir('upload/zip', function () {
                                                console.log("创建下载zip目录成功...");
                                                //创建下载zip的目录
                                                self.downFile(data.result.url);
                                            });
                                        })
                                    })
                                } else {
                                    self.createDir('upload/zip', function () {
                                        console.log("创建下载zip目录成功...");
                                        //创建下载zip的目录
                                        self.downFile(data.result.url);
                                    });
                                }
                            } else {
                                setTimeout(function () {
                                    window.location.href = "../src/Login/login.html";
                                }, 2250);
                            }
                        } else {
                            alert(data.msg);
                        }
                    });
                },
                /* 下载解压包 */
                downFile: function (url) {
                    var self = this;
                    self.download(url, 'upload/zip/nsrc.zip', function () {
                        /* 下载完成创建解压目录 */
                        clearInterval(self.timer);
                        sc.style.width = 0;
                        sj.innerHTML = '正在解压安装 2/2 '
                        console.log('正在创建临时目录');
                        self.createDir('nsrc', function () {
                            self.unZip();
                            console.log('正在解压...');
                            /* 前端做的假进程 */
                            setTimeout(function () {
                                var startC = parseInt(Math.floor(Math.random() * 3 + 1) * 10);
                                sc.style.width = startC + '%';
                                self.timer2 = setInterval(function () {
                                    startC += startC + Math.floor(Math.random() * 3 + 1) * 0.2;
                                    console.log('aaa');
                                    if (startC >= 90) {
                                        clearInterval(self.timer2);
                                        startC = 90;
                                    }
                                    sc.style.width = startC + '%';
                                }, 500);
                            }, 1000);


                        });
                        /*self.unZip();*/
                    });
                },
                /* 下载完成创建交换目录 */
                createDir: function (v, callback) {
                    var slef = this;
                    /* 创建的新目录名是nsrc*/
                    fs.mkdir(v, function (err) {
                        if (!err) {
                            console.log('创建目录成功...');
                            callback && callback(err);
                        } else {
                            console.log("创建目录失败...");
                        }
                    })
                },
                /* 解压zip */
                unZip: function () {
                    var self = this;
                    /* 解压到nsrc中*/
                    var extract = unzip.Extract({
                        path: 'nsrc' //process.cwd()
                    }); //获取根目录
                    fs.createReadStream('upload/zip/nsrc.zip').pipe(extract);
                    extract.on('error', function (err) {
                        console.log(err);

                        console.log("解压失败");
                    });
                    extract.on('finish', function () {
                        /* argv[1] 主模板的绝对路径 第一个命令行从 argv[2]这个位置开始 */
                        /* 在此之前删除之前的src文件夹 */
                        /* self.rmdirFile(process.cwd()+'\\'+'src', function () {
                            console.log(1);
                            /* 重命名文件夹 */
                        /*self.reName(fs.readdirSync(process.cwd()+'\\'+'nsrc')[0]);*/

                        /*console.log('success')
                        });*/

                    });

                    extract.on('close', function () {
                        /* */
                        console.log("解压成功");
                        self.rmdirFile('src', function () {
                            /*删除掉之前的src文件夹 解压 重命名新的文件夹*/
                            self.copy();
                        })


                    });
                    extract.on('end', function () {});
                },
                copy: function () {
                    var self = this;
                    fs.rename('nsrc/src', 'src', function (err) {
                        /* 删除 nsrc 如果能删除  说明压缩的 还未压缩完 再次压缩*/
                        if (fs.existsSync('nsrc')) {
                            fs.rmdir('nsrc', function (err) {
                                if (err) {
                                    console.log(err);
                                    console.log("删除失败....");
                                } else {
                                    console.log("删除成功...");
                                    self.copy();
                                }
                            });
                        } else {
                            self.rmdirFile('upload/zip', function () {
                                console.log("删除缓存成功...");
                                console.log("更新完成启动客户端...");
                                sc.style.width = 100 + '%';
                                setTimeout(function () {
                                    window.location.href = "../src/Login/login.html";
                                }, 2250);
                            });
                        }

                    })
                },
                /* 重命名 */
                reName: function (filename) {
                    var self = this;
                    /*  在此之前删除之前的src文件夹 */
                    fs.rename('nsrc', 'src', function (err) {
                        if (err) {
                            console.log("重命名失败...");
                        } else {
                            console.log("重命名成功...");
                            self.rmdirFile('upload/zip', function () {
                                console.log("删除缓存成功...");
                                console.log("更新完成启动客户端...");
                            });
                        }
                    });
                },
                /* 删除文件夹 */
                rmdirFile: function (paths, callback) {
                    var self = this;
                    var files = [];
                    /* 判断目录存在 */
                    /* d递归遍历*/
                    if (fs.existsSync(paths)) {
                        files = fs.readdirSync(paths); //同步请求
                        files.forEach(function (files, index) {
                            var curPath = paths + "/" + files; //遍历出每个一个目录
                            //如果当前目录也是目录
                            if (fs.statSync(curPath).isDirectory()) { //recurse
                                /* 递归遍历 */
                                self.rmdirFile(curPath);
                            } else {
                                fs.unlinkSync(curPath); //删除文件
                            }
                        });
                        fs.rmdirSync(paths); //删除空文件夹
                        console.log("删除成功...");
                    }
                    callback && callback();

                },
                /*---- 下载解压包 ----*/
                download: function (uri, filename, callback) {
                    var self = this;
                    request.head(uri, function (err, res, body) {
                        console.log('content-type:', res.headers['content-type']);
                        console.log('content-length:', res.headers['content-length']);
                        self.timer = setInterval(function () {
                            sc.style.width = (fs.statSync(filename).size / res.headers['content-length']) * 100 + '%';
                        }, 500);
                        request(uri).pipe(fs.createWriteStream(filename)).on('close', callback);
                    });
                },
            },
            console.log("执行结束");
    </script>

 

 

下面,改变我本地的 版本号!此时服务器上版本是1.1.1

打开后客户端:

下载完之后,看下global.js里面的源代码:

版本号发生了改变,此次更新成功!

注:我并非是将所要代码重新打包放到服务器,而是只把自己修改的部分打成zip(代码里可以看到我读取的之上是zip ),放在服务器上面,里面一定要包含存放版本号的文件,否则无法判断是否该更新!

注:此程序并非由我写!使我们公司的人写的!只是觉得不错,和大家分享分享!这里感谢东哥!

有写的不好的地方,还希望大家指教!

 

© 著作权归作者所有

共有 人打赏支持
会飞的Tiger
粉丝 0
博文 2
码字总数 1752
作品 0
程序员
加载中

评论(1)

y
yangqianR
请问楼主怎么实现 打印功能的 WinXP上
浏览器内核控制meta name="renderer" 说明文档

浏览器内核控制Meta标签说明文档 背景介绍 由于众所周知的情况,国内的主流浏览器都是双核浏览器:基于Webkit内核用于常用网站的高速浏览。基于IE的内核用于兼容网银、旧版网站。以360的几款...

今天来找bug ⋅ 05/22 ⋅ 0

CSS3媒体查询判断iphone4 5 6 6plus 7 7puls 8 8puls iphonex

兼容iphone4/4s@media (device-height:480px) and (-webkit-min-device-pixel-ratio:2){ }兼容iphone5@media (device-height:568px) and (-webkit-min-device-pixel-ratio:2){ }兼容iphone6......

舒龙虎 ⋅ 05/04 ⋅ 0

WebKit 继续泄密,macOS 10.14 将支持深色模式

今天早些时候,根据 WebKit 的代码我们发现,iOS 12 可能会继续支持 iPhone 5s。现在,又有国外的朋友在 WebKit 代码中发现了其他信息。首先,我们了解下 WebKit 到底是什么。Webkit 是一种渲...

达尔文 ⋅ 04/21 ⋅ 0

JavaFX 8 WebView中的WebKit版本

19向下投票接受 您可以通过查询 WebView引擎的用户代理字符串来确定在WebView中使用的WebKit的基本版本。 这显示了适用于Java 8u5的WebKit版本537.44。 这是JavaFX实现中使用的WebKit的上游版...

xiaomin0322 ⋅ 06/13 ⋅ 0

How Webkit works笔记

主要是参考google的这个幻灯片 webkit的作用就是将html,css,javascript渲染成web page。 它的主要组件有: api接口 webkit,webkit2 和平台的具体实现做绑定 bindings。绑定的准确定义我还...

yhchinabest ⋅ 04/15 ⋅ 0

webpck不能编译这个属性-webkit-box-orient: vertical (解决办法)

sass: / autoprefixer: off / -webkit-box-orient: vertical; / autoprefixer: on / less: /! autoprefixer: off / -webkit-box-orient: vertical; / autoprefixer: on / 参考: https://git......

沉迷学习中 ⋅ 06/15 ⋅ 0

Safari 11.1 发布,新的 WebKit 特性

最近发布的 macOS High Sierra 的 Safari 11.1 和 iOS 11.3 的 Safari 包括对 WebKit 的改进,增加了对许多网络平台技术的支持。这些功能提高用户感知的 Web 内容性能,为离线体验增添了一种...

周其 ⋅ 04/14 ⋅ 0

Emmet:HTML/CSS代码快速编写神器

Emmet:HTML/CSS代码快速编写神器 2013-04-16 17:40 by 副主编 wangguo 评论(16) 有121169人浏览 html css Emmet Zen coding 声明:ITeye资讯文章的版权属于ITeye网站所有,严禁任何网站转载...

thinkyoung ⋅ 2015/11/05 ⋅ 0

前端简洁并实用的工具类 (推荐收藏)

前言 本文主要从日期,数组,对象,axios,promise和字符判断这几个方面讲工作中常用的一些函数进行了封装,确实可以在项目中直接引用,提高开发效率. 1.日期 日期在后台管理系统还是用的很多的,一...

一个敲代码的前端妹子 ⋅ 05/22 ⋅ 0

memory cache 和 disk cache

在Fn+F12打开开发者工具后 选择network 点击界面任意链接 点击name下的任意一个 可以看到Headers Preview Response Coockies Timing 在请求头Headers里,status有几种状态 Status Code:200 ...

mickelfeng ⋅ 05/31 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Cube、Cuboid 和 Cube Segment

1.Cube (或Data Cube),即数据立方体,是一种常用于数据分析与索引的技术;它可以对原始数据建立多维度索引。通过 Cube 对数据进行分析,可以大大加快数据的查询效率 2.Cuboid 在 Kylin 中特...

无精疯 ⋅ 29分钟前 ⋅ 0

github太慢

1:用浏览器访问 IPAddress.com or http://tool.chinaz.com 使用 IP Lookup 工具获得github.com和github.global.ssl.fastly.net域名的ip地址 2:/etc/hosts文件中添加如下格式(IP最好自己查一...

whoisliang ⋅ 30分钟前 ⋅ 0

非阻塞同步之 CAS

为解决线程安全问题,互斥同步相当于以时间换空间。多线程情况下,只有一个线程可以访问同步代码。这种同步也叫阻塞同步(Blocking Synchronization). 这种同步属于一种悲观并发策略。认为只...

长安一梦 ⋅ 41分钟前 ⋅ 0

云计算的选择悖论如何对待?

人们都希望在工作和生活中有所选择。但心理学家的调查研究表明,在多种选项中进行选择并不一定会使人们更快乐,甚至不会产生更好的决策。心理学家Barry Schwartz称之为“选择悖论”。云计算为...

linux-tao ⋅ 43分钟前 ⋅ 0

我的第一篇个人博客

虽然这是个技术博客,但是,我总是想写一些自己的东西,所有就大胆的在这里写下了第一篇非技术博客。技术博客也很久没有更新,个人原因。 以后自己打算在这里写一些非技术博客,可能个人观点...

Mrs_CoCo ⋅ 44分钟前 ⋅ 0

Redis 注册为 Windows 服务

Redis 注册为 Windows 服务 redis 注册为 windows 服务相关命令 注册服务 redis-server.exe –service-install redis.windows.conf 删除服务 redis-server –service-uninstall 启动服务 re......

Os_yxguang ⋅ 44分钟前 ⋅ 0

世界那么大,语言那么多,为什么选择Micropython,它的优势在哪?

最近国内MicroPython风靡程序界,是什么原因导致它这么火呢?是因为他功能强大,遵循Mit协议开源么? 错!因为使用它真的是太舒服了!!! Micropython的由来,这得益于Damien George这位伟大...

bodasisiter ⋅ 48分钟前 ⋅ 0

docker 清理总结

杀死所有正在运行的容器 docker kill $(docker ps -a -q) 删除所有已经停止的容器(docker rm没有加-f参数,运行中的容器不会删掉) docker rm $(docker ps -a -q) 删除所有未打 dangling 标...

vvx1024 ⋅ 58分钟前 ⋅ 0

关于学习

以前学车的时候,教练说了这样的一句话:如果一个人坐在车上一直学,一直学,反而不如大家轮流着学。因为一个人一直学,就没有给自己留空间来反思和改进。而轮流着学的时候大家下来之后思考上...

mskk ⋅ 今天 ⋅ 0

压缩工具之gzip-bzip2-xz

win下常见压缩工具:rar zip 7z linux下常见压缩工具:zip gz bz2 xz tar.gz tar.bz2 tar.xz gzip 不支持目录压缩 gzip 1.txt #压缩。执行后1.txt消失,生成1.txt.gz压缩文件 gzip -d 1.txt....

ZHENG-JY ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部