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  
 