Node.js требуют наследования?

в моей server.js я включил библиотеку подчёркивания.

var _ = require('underscore')

У меня есть мои маршруты:

// require routes
require('./routes/document');

В маршруте документа я хочу использовать подчеркивание. Но похоже, что _ var не наследуется/в стороне от области документа. Означает ли это, что я должен установить _ var на каждый требуемый маршрут? Или есть более интеллектуальный способ сделать это?

Спасибо.

Ответ 1

Да, вы должны установить _ в файлы, которые должны быть доступны.

В качестве альтернативы вы можете поместить его в глобальную область, удалив часть var.

_ = require('underscore');
require('./routes/document'); // _ will be visible in document as well

Ответ 2

Проверьте документацию модуля node.js, где требуется require().

http://nodejs.org/docs/v0.4.5/api/modules.html

Что касается вашей специфики:

"Модули кэшируются после того, как они загружаются в первый раз. Это означает, среди прочего, что каждый вызов, требуемый (" foo "), получит точно тот же объект, который был бы возвращен, если он разрешит один и тот же файл".

Следовательно, если вы требуете ('underscore') как в родительской библиотеке, так и в файле. /routes/document, будет загружен только один экземпляр модуля подчеркивания, и, следовательно, оба vars будут фактически одним и тем же объектом.

И, кстати, вы не хотите определять переменные в глобальной области действия, так как это может вызвать побочные эффекты и потенциально переписать свойства в других модулях.

Наконец, модуль util предоставляет метод наследования для подкласса другого конструктора и наследует его прототипы.

http://nodejs.org/docs/v0.4.5/api/util.html#util.inherits

Ответ 3

Насколько я знаю, механизм node.js "требует/заряжает" модуль/файл .js в другой области (я точно не знаю, как это сделать) по соображениям безопасности (представьте, что модуль может изменить вары если бы это было необходимо, это было бы опасно!, больше информации об этом беспокойстве http://en.wikipedia.org/wiki/Information_hiding).

Единственным исключением являются глобальные объекты http://nodejs.org/api/globals.html, которые отображаются в области видимости модуля.

Глобальный объект - это объект "глобальный", а все, что вы определяете без ключевого слова var, добавляется к этому глобальному объекту:

foo_var = "Независимо от того, что

означает, что:

console.log(global.foo_var)//Журналы "Независимо"