2015-11-30 5 views
2

Недавно я создал приложение для узла и решил его модулировать.Как вы делаете переменные и зависимости доступными во всех модулях приложения-узла?

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

Однако методы и переменные пакета, определенные и требуемые в app.js, бросают ошибки как неопределенные. Это означает, что модулируемые файлы, которые я создаю, не имеют доступа к переменным и пакетам, требуемым в моем файле app.js.

Программа отлично работает в одном большом файле приложения. Код работает отлично, если я объявляю все зависимости и переменные в app.js как глобальные. И код будет работать, если мне нужны пакеты в каждом файле.

... Все эти решения поражения цели модульных шаблонов кода ...

Не могли бы вы направить меня на некоторые ресурсы на создании пакетов и переменных, доступных во всех модулях приложения узла, не загромождая глобальный масштаб ?

Спасибо!

ответ

0

Нет, это не так.

Модули инкапсулированы по умолчанию, экспортируя объект с именем .. module.export. Модули не имеют доступа к контексту (или переменным) родительского модуля.

В отличие от таких языков, как PHP, require() is не как объединение файлов.

Если вам необходимо передать данные, такие как config, db или другой модуль, вам необходимо передать его в модуль. Один простой пример таков:

// app.js 
var config = require('./config'); 
var db = require('./db').connect(config.DB_CONFIG); 

var UsersModel = require('./usersModel')(db); 

var someLogger = require('some-logger'); 
var logger = someLogger.init(config.SOME_OPTION); 

Конечно, существует много разных стилей и узоров.

0

Существует множество методов, которые вы можете использовать, и this article охватывает большинство из них.

Я часто использую вариант одноточечных шаблон для контекста приложения глобального, как экземпляры баз данных или лесорубы, а затем просто require('./provider') в каждый из соответствующих файлов. Все файлы, в которые требуется модуль, будут иметь тот же экземпляр этого модуля.

Зависимость впрыска - образец, который я использую в остальное время.

 Смежные вопросы

  • Нет связанных вопросов^_^