Подтвердить что ты не робот

Могут ли модули node.js быть обернуты внутри шаблона модуля?

Чтобы обеспечить правильную изоляцию, я склонен обертывать каждый модуль node.js, который я пишу внутри области видимости функции:

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

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

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

Я делал это в течение некоторого времени, но у меня такое чувство, что модульная система node.js 'на самом деле делает это для меня или (другими словами), что приведенный выше код эквивалентен следующему код:

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

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

Действительно ли эти два эквивалента? В частности, мне интересно узнать, является ли уровень изоляции одинаковым: являются ли переменными express, jade или moment локальными для модуля? (т.е. я хотел бы убедиться, что они не определены в глобальной области действия или не вмешиваются в какое-либо другое определение вне этого модуля).

4b9b3361

Ответ 1

Переменные, объявленные в модуле, являются локальными для этого модуля. Безопасно опустить вашу закрывающую функцию.

В Node.js docs:

Переменные, локальные для модуля, будут закрытыми, как если бы модуль был завернут в функцию