2016-08-31 7 views
1

文字列にjsファイルの内容があるとします。さらに、それがexports['default'] = function() {...}および/または他のエクスポートされたプロパティまたは関数を有すると仮定する。私はそれを使用することができるように、その文字列からオブジェクトにそれを(必要とする)コンパイルする方法はありますか? (また、私はそれがrequire()が行うようにキャッシュする必要はありません。)stringからオブジェクトへの要求があります

ここ

答えて

1

vm.runInThisContext()を使用して、非常に単純な例です:あなたがグローバルを使用したくない場合は、あなたが達成することができ、

const vm = require('vm'); 

let code = ` 
exports['default'] = function() { 
    console.log('hello world'); 
} 
` 

global.exports = {}; // this is what `exports` in the code will refer to 
vm.runInThisContext(code); 

global.exports.default(); // "hello world" 

evalを使用して似たような:

let sandbox  = {}; 
let wrappedCode = `void function(exports) { ${ code } }(sandbox)`; 

eval(wrappedCode); 

sandbox.default(); // "hello world" 

どちらの方法は、彼らは両方の任意のコードを実行できるようになりますので、あなたがそれに供給しているコードは、「安全」であることを前提としています。

関連する問題