Pregunta

I'm trying to execute a Function object which is essentially the same as the following pseudo-code:

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

And get:

ReferenceError: require is not defined

Do I need to somehow add something that reloads the require module as it's not a global module in Node? If so, google has not been my friend so any pointers on how to do so would be fantastic.

Thanks for your ideas.

¿Fue útil?

Solución

Since new Function is a form of eval you can just eval it:

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

If you want to follow the original approach you'll need to pass those globals to the function scope:

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); 

Otros consejos

Another possible solution, using the same method of calling the Function constructor:

var testF = new Function("x","y", "var require = global.require || global.process.mainModule.constructor._load; var http = require('http');");
testF('foo','bar');
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top