中文站长

 找回密码
 立即注册

Node.js Web应用代码热更新的另类思路

[复制链接]
发表于 2015-5-22 18:33:02 | 显示全部楼层 |阅读模式
若何更新模块代码
要处理模块代码更新的成绩,我们就需求去阅读 Node.js 的模块经管器完成,间接上链接 module.js。经由过程复杂的阅读,我们可以发觉焦点的代码就在于 Module._load ,稍微精简一下代码贴出来。
// Check the cache for the requested file.
// 1. If a module already exists in the cache: return its exports object.
// 2. If the module is native: call `NativeModule.require()` with the
//  filename and return the result.
// 3. Otherwise, create a new module for the file and save it to the cache.
//  Then have it load  the file contents before returning its exports
//  object.
Module._load = function(request, parent, isMain) {
  var filename = Module._resolveFilename(request, parent);
  var cachedModule = Module._cache[filename];
  if (cachedModule) {
  return cachedModule.exports;
  }
  var module = new Module(filename, parent);
  Module._cache[filename] = module;
  module.load(filename);
  return module.exports;
};
require.cache = Module._cache;
可以发觉个中的焦点就是 Module._cache ,只需断根了这个模块缓存,下一次 require 的时辰,模块经管器就会从头加载最新的代码了。
写一个小法式考证一下:
// main.js
function cleanCache (module) {
  var path = require.resolve(module);
  require.cache[path] = null;
}
setInterval(function () {
  cleanCache('./code.js');
  var code = require('./code.js');
  console.log(code);
}, 5000);
// code.js
module.exports = 'hello world';
我们履行一下 main.js ,同时取点窜 code.js 的形式,便可以发觉掌握台中,我们代码成功的更新为了最新的代码。
那末模块经管器更新代码的成绩已处理了,接上去再看看在 Web 利用中,我们若何让新的模块可以被现实履行。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|中文站长

站长网 WWW.MSNZZ.COM 版权所有 All Rights Reserved.

MSN站长网

WWW.MSNZZ.COM中文站长

快速回复 返回顶部 返回列表