require()
является синхронной операцией и блокирует событие l oop. Таким образом, вы обычно не хотите, чтобы когда-либо выполнялись первые require()
модуля в середине фактического обработчика запросов на сервере, поскольку это на мгновение заблокирует событие l oop.
Сейчас. Поскольку модули кэшируются, только первый раз, когда вы require()
модуль, на самом деле займет очень много времени. Но, тем не менее, считается хорошей практикой кодирования загружать ваши зависимости при запуске, когда синхронный ввод-вывод не имеет большого значения, а не во время выполнения.
Если при загрузке возникли проблемы зависимости, вы, вероятно, также хотите, чтобы они обнаруживались во время запуска сервера, а не после того, как сервер уже обслуживает клиентов.
Итак, я думаю, что ответ на ваш вопрос - да и нет. Да, это просто нормально - напрямую require()
без присвоения переменных в вашем коде запуска. Нет, это не рекомендуется делать внутри обработчика запросов или промежуточного программного обеспечения. Лучше загружать ваши зависимости при запуске. Теперь, ваш код не принесет большого вреда, если вам случится выполнить require()
внутри обработчика запроса, потому что только первая загрузка действительно происходит с диска и занимает очень много времени, но, как правило, это не рекомендуемый способ кодирования просто потому, что вы пытаетесь где-то сохранить имя переменной.
Лично я также хотел бы знать, что после запуска моего сервера все зависимости также были успешно загружены, поэтому нет опасности для несовершенного установить обнаружение позже, после того как он начнет обслуживать запросы (где может быть не так очевидно, что пошло не так и где пользователи увидят последствия).
Вот еще одна вещь, которую следует рассмотреть. Javascript с течением времени меняется с require()
на import
, и вы не можете использовать import
, кроме как на верхнем уровне модуля. Вы не можете использовать его внутри оператора.
Сводка:
- Вы хотите загружать зависимости при запуске, чтобы не блокировать событие l oop во время фактическая обработка запросов.
- Вы хотите загружать зависимости при запуске, чтобы обнаруживать любые недостающие зависимости при запуске сервера, а не во время его работы.
- Код обычно считается более удобным для чтения, если зависимости очевидны и их легко увидеть для всех, кто работает с этим модулем.
- В будущем, когда мы все будем использовать
import
вместо require()
, import
будет разрешено только на верхнем уровне.