Domanda

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.

È stato utile?

Soluzione

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

Altri suggerimenti

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');
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top