当执行一个Function对象时,节点“ReferenceError:require is not defined”

我试图执行一个函数对象,它基本上和下面的伪代码一样:

var testF = new Function("x","y", "var http = require('http');"); testF('foo','bar'); 

并得到:

 ReferenceError: require is not defined 

我是否需要以某种方式添加重新加载require模块的内容,因为它不是Node中的全局模块? 如果是这样,谷歌并不是我的朋友,所以任何关于如何这样做的指针会是太棒了。

感谢您的想法。

由于新function是一种评估forms,你可以eval它:

 eval("function testF(x,y){ console.log(require);}"); testF(1,2); 

如果你想遵循原来的方法,你需要将这些全局variables传递给函数作用域:

 var testF = new Function( 'exports', 'require', 'module', '__filename', '__dirname', "return function(x,y){console.log(x+y);console.log(require);}" )(exports,require,module,__filename,__dirname); testF(1,2); 

另一个可能的解决scheme,使用相同的方法调用函数构造函数:

 var testF = new Function("x","y", "var require = global.require || global.process.mainModule.constructor._load; var http = require('http');"); testF('foo','bar');