Pomelo熱更新刷新handler和remote 以及 pomelo使用bearcat進行熱更新

一. 開啓 原生 pomelo 的hotreload支持

  1. pomelo版本: 2.2.5 , 編輯腳本 app.js 加入以下代碼node

    //全局配置
        app.configure('production|development', function() {
          //讓全部服務器 都支持 handle 和remote 熱更新
          let serverConfig = {
            'reloadHandlers':true,
            'reloadRemotes':true,
          };
          app.set('serverConfig',serverConfig);
        });
  2. 原理:監聽文件改動,在文件變化之後從新加載,只能更新 remote rpc 和 handlergit

//監聽 handler
    var watchHandlers = function(app, handlerMap) {
      var p = pathUtil.getHandlerPath(app.getBase(), app.serverType);
      if (!!p){
        fs.watch(p, function(event, name) {
          if(event === 'change') {
            handlerMap[app.serverType] = Loader.load(p, app);
          }
        });
      }
    };

注意: 在 remote和handler 文件裏不要保存局部數據,不然刷新之後會丟失.github

二 .使用bearcat 熱更新

  1. 參考項目 https://github.com/NetEase/treasuresjson

  2. 根據 treasures 配置好 context.json服務器

{
	"name": "bearcat",
	"scan": "app",
    "beans": []
}

scan 就是要檢測的目錄 .session

  1. 修改app.js,添加以下內容
//BEARCAT_HOT 必定要配置成 on
//BEARCAT_LOGGER 若是不關閉,則pomelo的日誌輸出 會將全部的日誌都輸出到 pomelo-undefined.log 裏面.
var contextPath = require.resolve('./context.json');
bearcat.createApp([contextPath],
  { 
    BEARCAT_HOT: 'on',// 開啓熱更新,若是是off 那麼不會熱更新
    BEARCAT_LOGGER: 'off',//setup 'off' to turn off bearcat logger configuration,
  }
);

// 啓動APP
// app.start();
bearcat.start(function() {
  app.set('bearcat', bearcat);
  // start app
  app.start();
});

經過上面簡單的操做,bearcat 就已經配置好了.試一試修改文件,控制檯就會有提示bearcat從新加載.app

三. bearcat更新示例

entryHandler.js
Handler.prototype.enter = function (msg, session, next) {
    //這行若是寫在函數外面,則不能熱更新,每次修改文件要生效,都必須從新加載文件
    var Student = require('./student');
    var _stu = new Student();
    _stu.say();

    next(null,0);
    return;
  }
student.js
var Student = function(){

}
Student.prototype.say = function(){
  console.log("i am old say");
  console.log("i am old say");
  console.log("i am old say");
  console.log("i am old say");
}

module.exports = function(){
  return new Student();
}

測試過程:函數

  1. 開啓服務器 node app.js
  2. 調用 connector.entryHandler.enter , 會打印 i am old say
  3. 修改 i am old say ==> i am new say
  4. 控制檯輸出正在 reload ,等待reload 完畢.
  5. 調用 connector.entryHandler.enter , 會打印 i am new say

注意:

  1. 這行若是寫在函數外面,則不能熱更新,每次修改文件要生效,都必須從新加載文件 var Student = require('./student');測試

  2. 說明 bearcat 更新主要是更新 新建立的對象! 之前的對象是使用之前的代碼,這種狀況是更新不了的!ui

相關文章
相關標籤/搜索