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

  1 <script>
  2         var http = require('http');
  3         var fs = require('fs');
  4         var request = require('request');
  5         var unzip = require('unzip2');
  6         var Driver = function () {
  7             this.timer = '';
  8             this.timer2 = '';
  9         };
 10         Driver.prototype = {
 11                 /* 读取本地版本 */
 12                 readFile: function () {
 13                     var self = this;
 14                     if (fs.existsSync('src/js/global.js')) {
 15                         self.case1();
 16                     } else {
 17                         $.ajax({
 18                             type: 'post',
 19                             url: 'url(接口地址)',
 20                             dataType: 'jsonp',
 21                             contentType: "application/jsonp; charset=utf-8",
 22                             data: {'userId': 0,
 23                             },
 24                             success: function (data) {
 25                                 console.log("正在下载解压包...");
 26                                 if (data.code == 0) {
 27                                     if (data.result.update == 1) {
 28                                         var gx = document.getElementsByClassName('gx')[0];
 29                                         gx.style.display = "block";
 30                                         /* 下载地址 下载到的目录*/
 31                                         if (fs.existsSync('nsrc') || fs.existsSync('upload/zip')) {
 32                                             self.rmdirFile('upload/zip', function () {
 33
 34                                                 self.rmdirFile('nsrc', function () {
 35
 36                                                     self.createDir('upload/zip', function () {
 37                                                         console.log("创建下载zip目录成功...");
 38                                                         //创建下载zip的目录
 39                                                         self.downFile(data.result.url);
 40                                                     });
 41                                                 })
 42                                             })
 43                                         } else {
 44                                             self.createDir('upload/zip', function () {
 45                                                 console.log("创建下载zip目录成功...");
 46                                                 //创建下载zip的目录
 47                                                 self.downFile(data.result.url);
 48                                             });
 49                                         }
 50                                     } else {
 51                                         setTimeout(function () {
 52                                             window.location.href = "../src/Login/login.html";
 53                                         }, 2250);
 54                                     }
 55                                 }
 56                             },
 57                             error: function () {
 58
 59                                 alert(data.msg);
 60
 61                             }
 62
 63                         });
 64
 65                     }
 66                 },
 67                 /* 如果global没有被删除*/
 68                 case1: function () {
 69                     var self = this;
 70                     global.post('/system/checkVersion', {}, function (data) {
 71                         console.log("正在下载解压包...");
 72                         if (data.code == 0) {
 73                             if (data.result.update == 1) {
 74                                 var gx = document.getElementsByClassName('gx')[0];
 75                                 gx.style.display = "block";
 76                                 /* 下载地址 下载到的目录*/
 77                                 if (fs.existsSync('nsrc') || fs.existsSync('upload/zip')) {
 78                                     self.rmdirFile('upload/zip', function () {
 79
 80                                         self.rmdirFile('nsrc', function () {
 81
 82                                             self.createDir('upload/zip', function () {
 83                                                 console.log("创建下载zip目录成功...");
 84                                                 //创建下载zip的目录
 85                                                 self.downFile(data.result.url);
 86                                             });
 87                                         })
 88                                     })
 89                                 } else {
 90                                     self.createDir('upload/zip', function () {
 91                                         console.log("创建下载zip目录成功...");
 92                                         //创建下载zip的目录
 93                                         self.downFile(data.result.url);
 94                                     });
 95                                 }
 96                             } else {
 97                                 setTimeout(function () {
 98                                     window.location.href = "../src/Login/login.html";
 99                                 }, 2250);
100                             }
101                         } else {
102                             alert(data.msg);
103                         }
104                     });
105                 },
106                 /* 下载解压包 */
107                 downFile: function (url) {
108                     var self = this;
109                     self.download(url, 'upload/zip/nsrc.zip', function () {
110                         /* 下载完成创建解压目录 */
111                         clearInterval(self.timer);
112                         sc.style.width = 0;
113                         sj.innerHTML = '正在解压安装 2/2 '
114                         console.log('正在创建临时目录');
115                         self.createDir('nsrc', function () {
116                             self.unZip();
117                             console.log('正在解压...');
118                             /* 前端做的假进程 */
119                             setTimeout(function () {
120                                 var startC = parseInt(Math.floor(Math.random() * 3 + 1) * 10);
121                                 sc.style.width = startC + '%';
122                                 self.timer2 = setInterval(function () {
123                                     startC += startC + Math.floor(Math.random() * 3 + 1) * 0.2;
124                                     console.log('aaa');
125                                     if (startC >= 90) {
126                                         clearInterval(self.timer2);
127                                         startC = 90;
128                                     }
129                                     sc.style.width = startC + '%';
130                                 }, 500);
131                             }, 1000);
132
133
134                         });
135                         /*self.unZip();*/
136                     });
137                 },
138                 /* 下载完成创建交换目录 */
139                 createDir: function (v, callback) {
140                     var slef = this;
141                     /* 创建的新目录名是nsrc*/
142                     fs.mkdir(v, function (err) {
143                         if (!err) {
144                             console.log('创建目录成功...');
145                             callback && callback(err);
146                         } else {
147                             console.log("创建目录失败...");
148                         }
149                     })
150                 },
151                 /* 解压zip */
152                 unZip: function () {
153                     var self = this;
154                     /* 解压到nsrc中*/
155                     var extract = unzip.Extract({
156                         path: 'nsrc' //process.cwd()
157                     }); //获取根目录
158                     fs.createReadStream('upload/zip/nsrc.zip').pipe(extract);
159                     extract.on('error', function (err) {
160                         console.log(err);
161
162                         console.log("解压失败");
163                     });
164                     extract.on('finish', function () {
165                         /* argv[1] 主模板的绝对路径 第一个命令行从 argv[2]这个位置开始 */
166                         /* 在此之前删除之前的src文件夹 */
167                         /* self.rmdirFile(process.cwd()+'\\'+'src', function () {
168                             console.log(1);
169                             /* 重命名文件夹 */
170                         /*self.reName(fs.readdirSync(process.cwd()+'\\'+'nsrc')[0]);*/
171
172                         /*console.log('success')
173                         });*/
174
175                     });
176
177                     extract.on('close', function () {
178                         /* */
179                         console.log("解压成功");
180                         self.rmdirFile('src', function () {
181                             /*删除掉之前的src文件夹 解压 重命名新的文件夹*/
182                             self.copy();
183                         })
184
185
186                     });
187                     extract.on('end', function () {});
188                 },
189                 copy: function () {
190                     var self = this;
191                     fs.rename('nsrc/src', 'src', function (err) {
192                         /* 删除 nsrc 如果能删除  说明压缩的 还未压缩完 再次压缩*/
193                         if (fs.existsSync('nsrc')) {
194                             fs.rmdir('nsrc', function (err) {
195                                 if (err) {
196                                     console.log(err);
197                                     console.log("删除失败....");
198                                 } else {
199                                     console.log("删除成功...");
200                                     self.copy();
201                                 }
202                             });
203                         } else {
204                             self.rmdirFile('upload/zip', function () {
205                                 console.log("删除缓存成功...");
206                                 console.log("更新完成启动客户端...");
207                                 sc.style.width = 100 + '%';
208                                 setTimeout(function () {
209                                     window.location.href = "../src/Login/login.html";
210                                 }, 2250);
211                             });
212                         }
213
214                     })
215                 },
216                 /* 重命名 */
217                 reName: function (filename) {
218                     var self = this;
219                     /*  在此之前删除之前的src文件夹 */
220                     fs.rename('nsrc', 'src', function (err) {
221                         if (err) {
222                             console.log("重命名失败...");
223                         } else {
224                             console.log("重命名成功...");
225                             self.rmdirFile('upload/zip', function () {
226                                 console.log("删除缓存成功...");
227                                 console.log("更新完成启动客户端...");
228                             });
229                         }
230                     });
231                 },
232                 /* 删除文件夹 */
233                 rmdirFile: function (paths, callback) {
234                     var self = this;
235                     var files = [];
236                     /* 判断目录存在 */
237                     /* d递归遍历*/
238                     if (fs.existsSync(paths)) {
239                         files = fs.readdirSync(paths); //同步请求
240                         files.forEach(function (files, index) {
241                             var curPath = paths + "/" + files; //遍历出每个一个目录
242                             //如果当前目录也是目录
243                             if (fs.statSync(curPath).isDirectory()) { //recurse
244                                 /* 递归遍历 */
245                                 self.rmdirFile(curPath);
246                             } else {
247                                 fs.unlinkSync(curPath); //删除文件
248                             }
249                         });
250                         fs.rmdirSync(paths); //删除空文件夹
251                         console.log("删除成功...");
252                     }
253                     callback && callback();
254
255                 },
256                 /*---- 下载解压包 ----*/
257                 download: function (uri, filename, callback) {
258                     var self = this;
259                     request.head(uri, function (err, res, body) {
260                         console.log('content-type:', res.headers['content-type']);
261                         console.log('content-length:', res.headers['content-length']);
262                         self.timer = setInterval(function () {
263                             sc.style.width = (fs.statSync(filename).size / res.headers['content-length']) * 100 + '%';
264                         }, 500);
265                         request(uri).pipe(fs.createWriteStream(filename)).on('close', callback);
266                     });
267                 },
268             },
269             console.log("执行结束");
270     </script>

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

打开后客户端:

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

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

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

node webkit(nw.js) 设置自动更新相关推荐

  1. linux8软件升级,CentOS 8设置自动更新的完整步骤

    你可以为数据和计算机做的最好的事情就是确保它们的安全.就像打开更新一样简单,但是,大多数使用CentOS 8的人都不知道该怎么做. Setup-CentOS-8-Automatic-Updates 在 ...

  2. sublime 设置自动更新_不止是自动更新!简单几步让Windows 10变听话的孩子

    免费参与!萤石C6C互联网摄像机众测报名了 电脑报蛋黄星球众测·第四期来了,这一次众测的产品是来自萤石的C6C互联网摄像机1080P无极巡航版本,将从申请报名的用户中选择20名参与众测,重点本次众测是 ...

  3. sublime 设置自动更新_Win10关闭自动更新的三种方法

    Win10怎么关闭自动更新呢?很多人都不知道,下面小编来告诉大家. 第一种方法 我们右击电脑左下角的微软按钮,弹出的界面,我们点击运行: 弹出的运行中,我们输入services.msc,之后点击确定: ...

  4. 【技巧】Excel序号设置自动更新

    做Excel表格的时候,我们经常需要设置序号,在输入序号的时候,你是不是这样做?手动输入序号1,再向下填充,当遇到有不想要的内容,点删除后,发现中间的序号就不连贯了,再手动去改,这样改多几次也是很烦人 ...

  5. auto.js实现自动更新,带进度条

    本人在autojs是个新萌,大佬请多指教 注意: 包名不一致:系统会认为是个新的软件,这就不算升级了 签名不一致:系统会提示先卸载之前安装的版本,才能继续安装新的(不卸载之前的,提示安装失败) 自动更 ...

  6. postgresql设置自动更新时间方法

    在我们日常开发中,在设计数据库字段的时候不可避免的都要created_time(创建时间)以及updated_time(修改时间)两个时间戳字段,作用大家也都一目了然.下面将为大家详细介绍两个字段的如 ...

  7. Centos安装ClamAV并且设置自动更新病毒库

    265  curl www.baidu.com先看看有网吗?   266  yum install -y pcre* zlib zlib-devel libssl-devel libssl   267 ...

  8. 无法更新计算机配置系统时间,电脑怎么设置系统时间自动更新

    有时由于系统某些故障导致时间错乱,还得我们自行去调,能不能设置为自动更新呢?下面由学习啦小编为你整理了电脑怎么设置自动更新时间的相关方法,希望对你有帮助! 电脑设置自动更新时间的方法 首先我们双击点击 ...

  9. 用计算机升级ipad系统软件,iPad怎么设置软件程序自动更新?

    现在各种软件也是推陈出新,为了适应最新的系统.潮流,每隔一段时间都会有更新.不想错过的朋友,可以在你的iPad上设置自动更新. 1.看到iPad上面的app store常年有个右上角的数字,强迫症的人 ...

最新文章

  1. Java InputStream详解
  2. Spring Web Flow 2.0 入门详解
  3. 蔚来召回4803辆ES8电动汽车 自燃原因找到了?
  4. 在weblogic12c中启动工程报错缺失BeanFactoryAware
  5. 【转】超现实的经典语录
  6. maven3常用命令、java项目搭建、web项目搭建详细图解
  7. JetBrains:webstrom关闭重复代码校验
  8. 利用Python进行百度文库内容爬取(一)
  9. matlab 标准色度图,采用Matlab图像进行有色溶液样液浓度测试
  10. OSEK OS标准简介(转)
  11. mysql 05_MySQL 05
  12. android 判断 飞行模式,Android 判断飞行模式的状态
  13. Using the Hardware Scaler for Performance and Efficiency
  14. 厨房里的ERP(MRP)
  15. WCDMA通信技术-CFN SFN
  16. 「来道题」Redis的Gossip协议
  17. NVIDIA Tesla K80:怪物般的双芯计算卡
  18. c#和java部署pytorch同事识别两个图片_身份证OCR识别移动端amp;服务器
  19. Android开发我音乐App
  20. 长程蓝牙温湿度及光照度传感器 , 带四通道开关及指示灯(集成太阳能微能量采集功能)

热门文章

  1. php字符串对象,PHP字符串到对象名称
  2. UVA 10895——Matrix Transpose
  3. Qt eventFilter实现信号与槽
  4. linux操作系统之进程组及会话
  5. oracle+连接格式,oracle外连接符号(+)的用法
  6. Java类名与包名不区分大小写
  7. epoll非阻塞IO
  8. 计算机网络(一)计算机网络体系
  9. c语言 大雨 班上多个同学准备,2015年计算机二级考试《C语言》提高练习题(7)
  10. 如何修改浏览器的默认滚动条样式