我想require
从内存中获取 Node.js 模块,例如因为它是在运行时生成的或从网络流中接收的。
这可能吗?
您如何解决此问题(当然,无需写入磁盘并从那里加载)?
基本上,例如:
var code = 'module.exports = { foo: "bar" };';
var obj = require(code);
console.log(obj.foo); // => bar
我目前能想到的唯一方法是使用该eval
函数,例如:
var myModule = {};
eval(
'(function (module) {' +
' var local = 5;' +
' module.exports = {' +
' foo: \'bar\'' +
' };' +
' module.exports.baz = \'baz\';' +
'})(myModule)');
评估后,myModule.exports
包含导出的对象:
{
foo: 'bar',
baz: 'baz'
}
并且模块内应该是本地的任何东西都保持在本地。
因此,您可以创建一个函数require2
,例如:
var require2 = function (code) {
var temp = {};
eval('(function (module) {' + code + '})(temp);');
return temp.exports;
};
无论如何,我对更好的想法感兴趣...... :-)
PS:能够从流中请求将很棒:-)