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

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

代码如下:

<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 ),放在服务器上面,里面一定要包含存放版本号的文件,否则无法判断是否该更新!

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

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

时间: 2024-11-04 14:00:50

node webkit(nw.js) 设置自动更新的相关文章

node webkit (nw.js) 无法调试的结局方案之一

项目,当时主要内容是由别人做的!过后回到家中,自己研究了下这方面.结果发现我的 nw 客户端不可以调试!在网上各种找办法,没找到,深感绝望,突然看到 (https://github.com/nwjs/nw.js/blob/nw17/docs/For%20Users/Getting%20Started.md) 上面说,建议你选择 sdk 版本! nw.js sdk 版本什么东西?抱着试一试的心态下了一个! 熟悉的界面又回来了!

JS时间自动更新

js部分: <!--自动更新时间--><script>function show(){var date = new Date(); //日期对象var now = "";now = date.getFullYear()+"年"; //读英文就行了now = now + (date.getMonth()+1)+"月"; //取月的时候取的是当前月-1如果想取当前月+1就可以了now = now + date.getDate(

转载:Android应用的自动更新模块

软件的自动更新一般都与Splash界面绑定在一起, 由于需要维护的软件界面很复杂, 一个Activity中嵌入ViewPager, 并且逻辑比较复杂, 索性重新写一个Activity, 现在的软件都很流行使用Splash界面, 正好与自动更新配套在一起; 在这个自动更新Splash中, 使用到了 动画设置 ,SharedPerference ,pull解析 ,dialog对话框 ,http网络编程 ,handler 等. 注意一个错误 : 已安装具有该名称和不同签名的数据包 , 早上测试人员报告

nw.js开发第一个程序(html开发桌面程序exe)

一.环境配置 windows系统 cnpm install node 下载nw.js https://github.com/nwjs/nw.js 找到download下载合适的版本 二.开发 项目目录如下: node_modules存放用到的node模块,package.json是入口文件 package.json内容为 {"name": "nw-app","version": "1.0.0","descriptio

[转]Android应用的自动更新

软件的自动更新一般都与Splash界面绑定在一起, 由于需要维护的软件界面很复杂, 一个Activity中嵌入ViewPager, 并且逻辑比较复杂, 索性重新写一个Activity, 现在的软件都很流行使用Splash界面, 正好与自动更新配套在一起; 在这个自动更新Splash中, 使用到了 动画设置 ,SharedPerference ,pull解析 ,dialog对话框 ,http网络编程 ,handler 等. 注意一个错误 : 已安装具有该名称和不同签名的数据包 , 早上测试人员报告

Win10系统自动更新失败的解决方案

Win10设置自动更新后,用户就能及时收到微软最新的补丁推送,并进行安装.可是有用户自动更新Win10系统的时候,出现安装失败的情况,重新更新还是失败,遇到这个问题可将失败的更新补丁进行删除处理. 步骤 1.首先要停止Windows update服务,但win10 在控制面板里是关不掉的,我们就要进入组策略文件,在运行里输入gpedit.msc 进入.然后在计算机配置>管理模板>windows组件 >windows更新 >配置自动更新为禁用. 2.关闭后我们就要删除临时更新文件 进

关闭Chrome浏览器的自动更新

Windows下: [计算机]->[管理]->[任务计划程序]->[任务计划程序库]中: 将"GoogleUpdateTaskMachineCore"."GoogleUpdateTaskMachineUA"等相关项停止并禁用 [计算机]->[管理]->[服务]中: 将"Google更新服务(gupdate)"."Google更新服务(gupdatem)"等相关项停止并禁用 Mac下: 方式一 首先

Word文档自动生成目录方法,一看就会!还会自动更新

无论是写论文还是工作中,有时候需要设置Word文档的目录,但是那么多页的文档,一个一个手动去添加太麻烦了,究竟有什么好办法可以让Word文档自动生成目录呢?相信大家都想知道,那今天就让小编给大家讲讲Word文档自动生成目录的方法吧,绝对简单,保证大家看完就会! 1.先设置好文章的标题样式 首先,需要把文章的标题样式设置好,选择需要作为目录的文本内容,右键点击[段落]--大纲级别选择[1级]:它之后的小标题则依次设为[二级].[三级]-2.新建一张空白页,留作目录页 标题样式设置后,就可以按住快捷

timestamp的自动更新 ON UPDATE CURRENT_TIMESTAMP

最近有一个关于MySQL版本升级的事,涉及到一些关于时间类型的细节问题需要查明,因此到官网找到相关文章,翻出来比较方便自己理解,博客这里也贴一下. 参考官网网址: https://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html 自MySQL 5.6.5开始TIMESTAMP和DATETIME类型可以实现自动初始化或更新为CURRENT_TIMESTAMP的功能,在5.6.5之前这个特性只有TIMESTAMP才能用.鉴于现