对于代码而不是文件,是true require()

时间:2011-12-24 23:27:19

标签: node.js

如果我有一个包含源代码的字符串

var code = "console.log('I\'ve been loaded.');";

并希望在Node中运行它,通常建议使用

vm.runInThisContext(code, "NOT_A_FILE.mycode");

在代码变得更复杂之前,这一切都很好:

var code2 = "require('http');\n" +
            "console.log(http);"  // TODO make more useless

在这种情况下,我们无法vm中运行code2,因为它不会让模块具有require()功能,因为vm只是一个V8 VM,而不是节点之一。

这是我到目前为止遇到的唯一问题 - 但我不知道其他问题可能会在未来发生。


所以,从根本上说,我的问题是:require()在制作Node模块时有哪些额外的功能,以及如何确保我的“字符串”模块具有此功能?如果我需要这个功能,我最好只制作临时文件,我实际上是require()

1 个答案:

答案 0 :(得分:0)

vm.runInNewContext而不是vm.runInThisContext,然后在沙盒中运行它,您可以传递require对象!多数民众赞成......

var vm = require('vm');
var code2 = "var http = require('http');\n" + "console.log(http);" //TODO make more useless
vm.runInNewContext(code2, {
require: require,
http: require('http'),
console: console
}, 'yourvmfilename1');

或者你可以直接发送http对象。

 var vm = require('vm');
 var code3 = "console.log(http);" //TODO make more useless
 vm.runInNewContext(code3, {
 http: require('http'),
 console: console
}, 'yourvmfilename2');