Search code examples
node.jsfunctionrequire

Node "ReferenceError: require is not defined" when executing a Function object


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.


Solution

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