Работа с модулями¶
Рассмотрим некоторые аспекты работы с модулями в 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.jsmorning.jsevening.js
В итоге общая структура проекта пусть будет выглядеть следующим образом:
welcomeindex.jsmorning.jsevening.js
app.jsgreeting.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, то мы можем обращаться к модулю по имени каталога, как в данном случае.
Запустим приложение, и на консоль будут выведены оба приветствия:

