2

我想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:能够从流中请求将很棒:-)

4

2 回答 2

0

在没有更好的主意的情况下,我现在采用了我在问题中已经描述的方法,并进行了一些调整,但总体思路是:

var require2 = function (code) {
  var temp = {};
  eval('(function (module) {' + code + '})(temp);');
  return temp.exports;
};
于 2013-01-27T19:14:05.350 回答
0

这已经在这里得到了回答:

但是,您可以在 Github的require-from-string包中找到更完整的实现。

TL;DR 是您使用 node.js 中的Modules包从字符串 _compile 代码。

于 2017-03-28T20:22:10.970 回答