要求()从字符串到对象

时间:2016-08-31 19:57:09

标签: node.js require

假设我在字符串中有js文件的内容。此外,假设它具有exports['default'] = function() {...}和/或其他导出的属性或函数。有没有办法从该字符串“需要”它(编译它)到一个对象,这样我可以使用它? (另外,我不想像require()那样缓存它。)

1 个答案:

答案 0 :(得分:2)

以下是使用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"

这两种方法都假设您输入的代码是“安全的”,因为它们都允许运行任意代码。