Работа с модулями¶
Рассмотрим некоторые аспекты работы с модулями в Node.js. Прежде всего надо отметить, что подключаемые модули кэшируются. В частности, в файле https://github.com/nodejs/node/blob/master/lib/internal/modules/cjs/loader.js есть такие строки:
1 2 3 4 5 6 7 8 9 10 11 |
|
Это, с одной стороны, увеличивает производительность, а с другой, может создать некоторые проблемы, если мы не будем учитывать этот аспект. Например, возьмем проект из прошлой темы, где в главный файл приложения app.js
подключается модуль greeting.js
. Изменим файл greeting.js
следующим образом:
1 |
|
В файле определена только одна строка, которая устанавливает свойство name
.
Изменим код файла app.js
:
1 2 3 4 5 6 7 8 9 |
|
Несмотря на то, что здесь два раза получаем модуль с помощью функции require
, но обе переменных - greeting1
и greeting2
будут указывать на один и тот же объект.
Структура модулей¶
Нередко модули приложения образуют какие-то отдельные наборы или области. Такие наборы модулей лучше помещать в отдельные каталоги. Например, создадим в каталоге приложения подкаталог welcome
и создадим в нем три новых файла:
index.js
morning.js
evening.js
В итоге общая структура проекта пусть будет выглядеть следующим образом:
welcome
index.js
morning.js
evening.js
app.js
greeting.js
В файл morning.js
поместим следующую строку:
1 |
|
Аналогично изменим файл evening.js
:
1 |
|
Эти два файла определяют сообщения приветствия в зависимости от времени суток.
И определим в файле index.js
следующий код:
1 2 3 4 5 6 7 8 9 10 11 |
|
В модуле определен объект, который имеет две функции для вывода приветствий.
Теперь используем этот модуль в файле app.js
:
1 2 3 4 |
|
Несмотря на то, что нет такого файла как welcome.js
, но если в проекте есть каталог, который содержит файл с именем index.js
, то мы можем обращаться к модулю по имени каталога, как в данном случае.
Запустим приложение, и на консоль будут выведены оба приветствия: