node-webkit桌面應用的熱更新

最近在開發基於 nw.js 的桌面應用,需求中須要實現軟件的熱更新,下面簡單說下實現步驟html

依賴

nw.js

node-webkit 至關於 Chromium 和 node.js 的結合體,咱們能夠經過它來將web應用打包成跨平臺的桌面應用,使桌面應用的開發更加簡單、高效node

node-webkit-updater

由 nw 官方開發者提供的 應用熱更新組件linux

安裝

npm install node-webkit-updatergit

使用

配置文件

修改開發目錄下的 package.json ,設置版本檢查的信息和新版本下載地址github

{
        "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 進行版本校驗web

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);
            }
        });
    }

更新版本

當有新版本更新後把新版本打成壓縮包放到配置文件中配置的目錄,npm

並把新的package.json也放到配置的目錄下json

這樣用戶在打開應用的時候就會去校驗版本,若是有新版本就會去自動下載了,而且在下載完成後應用會自動重啓app

相關文章
相關標籤/搜索