Page 322 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 322
полезно знать, как Node ищет импортируемые модули, особенно когда наступает
время поиска проблемы в модулях стороннего производителя.
Не помещайте те модули, которые вы пишете сами, в каталог node _ modules. Ра
ботать это будет, но особенность каталога node _ modules в том, что он может быть
удален утилитой npm в любой момент и воссоздан из зависимостей, перечисленных
в файле package . j son (см. главу 2).
Вы можете, конечно, опубликовать собственный модуль с помощью утилиты npm
и управлять им, используя npm, но тогда вы должны избегать внесения в него изме
нений непосредственно в каталоге node _ modules!
n
Измен н и е параметров моду ей
е
n
с помощью моду ей - функций
Обычно модули экспортируют объекты, а иногда и одну функцию. Однако есть
и другой популярный сценарий их использования - модуль, который экспортирует
функцию, предназначенную для немедленного вызова. Речь идет о том, что возвра
щаемое модулем значение само по себе является функцией, которая сразу же вы
зывается. Другими словами, вы не используете далее в своей программе то, что воз
вращает модуль, а вызываете эту функцию и используете то, что она возвращает.
Этот сценарий используется, когда нужно изменить параметры модуля либо полу
чить информацию об окружающем контексте. Давайте рассмотрим реальный пакет
npm debug. При импортировании функции debug ей передается текстовая строка,
которая будет использоваться как префикс при выводе отладочных сообщений. Бла
годаря этому можно будет различать сообщения, выведенные из различных частей
программы.
g
n
const debug = require ( ' debu ' ) ( ' mai ' ) ; 11 обратите внимание, что мы
1 1 сразу вызываем функцию, которую
/ / возвращает модуль
о
dеЬug ( " начал " ) ; / / выводит
1 1 "main начало +Oms ", если
1 1 отладка будет разрешена
Чтобы разрешить отладку с использованием библиотеки debug, уста
новите переменную окружения DEBUG. Для нашего примера мы устано
вили бы DEBUG=main. Вы можете также установить DEBUG=*, что раз
решает вывод всех отладочных сообщений.
Из этого примера ясно, что модуль debug возвращает функцию (поскольку мы
непосредственно вызываем это как функцию)". и эта функция сама возвраща
ет функцию, которая "помнит" строку, переданную первой функции. По сути мы
Изменение параметров модулей с помощью модулей-фун к ций 325

