一. 開啓 原生 pomelo 的hotreload支持
-
pomelo版本: 2.2.5 , 編輯腳本 app.js 加入以下代碼node
//全局配置 app.configure('production|development', function() { //讓全部服務器 都支持 handle 和remote 熱更新 let serverConfig = { 'reloadHandlers':true, 'reloadRemotes':true, }; app.set('serverConfig',serverConfig); });
-
原理:監聽文件改動,在文件變化之後從新加載,只能更新 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 熱更新
-
參考項目 https://github.com/NetEase/treasuresjson
-
根據 treasures 配置好 context.json服務器
{ "name": "bearcat", "scan": "app", "beans": [] }
scan 就是要檢測的目錄 .session
- 修改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(); }
測試過程:函數
- 開啓服務器 node app.js
- 調用 connector.entryHandler.enter , 會打印 i am old say
- 修改 i am old say ==> i am new say
- 控制檯輸出正在 reload ,等待reload 完畢.
- 調用 connector.entryHandler.enter , 會打印 i am new say
注意:
-
這行若是寫在函數外面,則不能熱更新,每次修改文件要生效,都必須從新加載文件 var Student = require('./student');測試
-
說明 bearcat 更新主要是更新 新建立的對象! 之前的對象是使用之前的代碼,這種狀況是更新不了的!ui