我想从内存中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:能够从流中要求会很棒: - )
答案 0 :(得分:0)
在没有更好的想法的情况下,我现在采用了我已经在我的问题中描述的方法进行了一些调整,但总的想法是:
var require2 = function (code) {
var temp = {};
eval('(function (module) {' + code + '})(temp);');
return temp.exports;
};
答案 1 :(得分:0)