Itay Maman
Itay Maman

Reputation: 30723

Are node.js modules need to be wrapped inside the module pattern?

To ensure proper isolation, I tend to wrap each node.js module that I write inside a function scope:

(function() {
  var express = require('express');
  var jade = require('jade');
  var moment = require('moment');

  exports.someFunction = function() {
    // do something    
  };

  exports.otherFunction = function() {
    // do something else
  };
})();

I've been doing this for some time now, but I have the feeling that node.js' module system is actually doing this for me, or (in other words) that the above code is equivalent to the following code:

var express = require('express');
var jade = require('jade');
var moment = require('moment');

exports.someFunction = function() {
  // do something    
};
exports.otherFunction = function() {
  // do something else
};

Are the two really equivalent? In particular, I am interested to know whether is the isolation level is the same: are the express, jade or moment variables local to the module? (i.e., I'd like to make sure that they are not defined in the global scope or interfere with any other definition outside of this module).

Upvotes: 30

Views: 3276

Answers (1)

James Allardice
James Allardice

Reputation: 165971

Variables declared within a module are local to that module. It is safe to omit your enclosing function.

From the Node.js docs:

Variables local to the module will be private, as though the module was wrapped in a function

Upvotes: 39

Related Questions