有没有办法从内存或者mongodb中require一个文件?
发布于 11 年前 作者 conis 4532 次浏览 最后一次编辑是 8 年前

比如说,我在一个项目中有很多动态生成的代码(例如mongoose的schema)。现在我希望把这些代码存到mongodb中,然后需要的时候再读出来并require。

也就是说,被require这段代码并不在实际的物理路径上,而是内存中或者数据库中。

我大概希望的是这样,类似下面的代码,js代码(doc.content)是存在mongodb中的,读取数据库,再require这段代码。

model.findOne({}, function(err, doc){
   var mod = require(doc.content)
})

诸位,有什么好建议?

2 回复

给你看看下面的代码:

// node.js require js的处理
Module._extensions['.js'] = function(module, filename) {
  var content = NativeModule.require('fs').readFileSync(filename, 'utf8');
  module._compile(stripBOM(content), filename);
}

// coffee-script 增加到coffee的处理
 loadFile = function(module, filename) {
  var raw, stripped;

   raw = fs.readFileSync(filename, 'utf8');
   stripped = raw.charCodeAt(0) === 0xFEFF ? raw.substring(1) : raw;
   return module._compile(compile(stripped, {
      filename: filename,
      literate: helpers.isLiterate(filename)
    }), filename);
 };

 if (require.extensions) {
    _ref = ['.coffee', '.litcoffee', '.coffee.md'];
   for (_i = 0, _len = _ref.length; _i < _len; _i++) {
     ext = _ref[_i];
     require.extensions[ext] = loadFile;
  }
}

本质就是去扩展一下require方法,让它对某个特定的后缀作处理,node.js的代码在源码中的module.js,coffee的在coffee-script.js中,自己去参考一下。

回到顶部