node-webkit桌面应用的热更新
最近在开发基于 nw.js 的桌面应用,需求中需要实现软件的热更新,下面简单说下实现步骤
依赖
nw.js
node-webkit 相当于 Chromium 和 node.js 的结合体,我们可以通过它来将web应用打包成跨平台的桌面应用,使桌面应用的开发更加简单、高效
node-webkit-updater
由 nw 官方开发者提供的 应用热更新组件
安装
npm install node-webkit-updater
使用
配置文件
修改开发目录下的 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
进行版本校验
var gui = require('nw.gui'); //操作nw应用 var pkg = require('./package.json'); // 本地配置文件 var updater = require('node-webkit-updater'); //热更新 var upd = new updater(pkg); var copyPath, execPath; var progressTimer; //设置一个定时器,用来模拟下载的进去条 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 { // 从manifest目录校验版本 upd.checkNewVersion(function(error, newVersionExists, manifest) { if (!error && newVersionExists) { // 有新版本显示下载进度条开始下载 $('.mask').show(); setTimeout(function() { var startC = parseInt(Math.floor(Math.random() + 1) * 3); $('.progress div').width(startC + '%'); progressTimer = setInterval(function() { startC += Math.random() * 2; if (startC >= 95) { clearInterval(progressTimer); startC = 95; } $('.progress div').width(startC + '%'); $('.progress p').html(startC.toFixed(2) + '%'); }, 2000); }, 1000); // 下载新版本 upd.download(function(error, filename) { if (!error) { clearInterval(progressTimer); $('.progress div').width('100%'); $('.progress p').html('100%'); // 下载完成关闭应用 upd.unpack(filename, function(error, newAppPath) { if (!error) { // 重启应用 upd.runInstaller(newAppPath, [upd.getAppPath(), upd.getAppExec()], {}); gui.App.quit(); } }, manifest); } }, manifest); } }); }
更新版本
当有新版本更新后把新版本打成压缩包放到配置文件中配置的目录,
并把新的package.json也放到配置的目录下
这样用户在打开应用的时候就会去校验版本,如果有新版本就会去自动下载了,并且在下载完成后应用会自动重启
相关推荐
zhujuyu 2020-05-28
tichangde 2019-12-13
leeeryan 2014-11-14
xtuhcy 2014-11-14
icewizardry 2014-04-16
icewizardry 2014-04-15
FZfeng 2014-04-14
zcwer 2019-06-26
Jym 2014-06-03
希望能帮助到你 2013-04-22
heavenmark 2017-03-10
东辉在线 2019-02-13
linuxjourney 2014-03-09
zqjflash 2018-02-01
草丛中枪 2019-04-05
streamindxd 2019-04-03