最近在开发一个基于nw.js的桌面应用。需求中需要实现软件的热更新。下面简单介绍一下实现步骤。依赖nw.jsnode-webkit相当于Chromium和node.js的结合。我们可以用它来将web应用打包成跨平台的桌面应用,让桌面应用的开发更简单高效package.json,设置版本检查信息和新版本下载地址{"name":"应用名称","version":"0.0.1",//版本号"manifestUrl":"xxx/package.json",//应用需要校验的配置文件地址"packages":{//下载地址新版压缩包"mac":{"url":"xxx/updapp.zip"},"win":{"url":"xxx/updapp.zip"},"linux32":{"url":"xxx/updapp.tar.gz"}}}验证版本在项目的js中使用node-webkit-updater进行版本验证vargui=require('nw.gui');//运行nw应用程序varpkg=require('./package.json');//本地配置文件varupdater=require('node-webkit-updater');//热更新varupd=newupdater(pkg);变种复制路径,执行路径;变种进度计时器;//设置一个定时器模拟下载入口if(gui.App.argv.length){copyPath=gui.App.argv[0];execPath=gui.App.argv[1];//替换旧版本upd.install(copyPath,function(err){if(!err){//重启upd.run(execPath,null);gui.App.quit();}});}else{//从清单目录检查版本upd.checkNewVersion(function(error,newVersionExists,manifest){if(!error&&newVersionExists){//有新版本显示下载进度条开始下载$('.mask').show();setTimeout(function(){varstartC=parseInt(Math.floor(Math.random()+1)*3);$('.progressdiv').width(startC+'%');progressTimer=setInterval(function(){startC+=Math.random()*2;if(startC>=95){clearInterval(progressTimer);startC=95;$('.progressdiv').width(startC+'%');$('.progressp').html(startC.toFixed(2)+'%');},2000);},1000);//下载新版本upd.download(function(error,filename){if(!error){clearInterval(progressTimer);$('.progressdiv').width('100%');$('.progressp').html('100%');//下载完成后关闭应用upd.unpack(filename,function(error,newAppPath){if(!error){//重启应用upd.runInstaller(newAppPath,[upd.getAppPath(),upd.getAppExec()],{});gui.App.quit();}},清单);}},清单);}});}更新版本当有新版本更新时,将新版本打成压缩包放在配置文件配置的目录下,将新的package.json放在配置的目录下,这样用户打开应用时就可以了会检查版本,如果有新版本会自动下载,下载完成后应用会自动重启
