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

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

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

  • 相关阅读:
    验证车牌警车能源车
    两个二维数组组合并且日期相同的其他值相加
    运用phpExcel导出查询的数据
    JQ加减乘除运算
    获取url传递的参数、鼠标滚动加载事件
    SQL查询将数据按字段(2017-08-15 11:34:05)进行按月分组
    关于角色和权限控制数据表相关
    有关无限极分类并排序问题
    前端解决用户登录时,禁止chrome提示用户保存密码
    前端学习之iframe配合hash做菜单导航的问题:修改src跳转与contentWindow.location.replace('')的问题
  • 原文地址:https://www.cnblogs.com/blogcxz/p/6145612.html
Copyright © 2020-2023  润新知