2

Node.js モジュールをメモリから取得したいと考えてrequireいます。たとえば、実行時に生成されるか、ネットワーク ストリームから受信されるためです。

これはまったく可能ですか?

この問題をどのように解決できますか (もちろん、ディスクへの書き込みとそこからの読み込みは必要ありません)。

基本的には、次のようなものです。

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 に答える