Выбор ответа Middle Модули и npm обновлено
require() для ES-модуля в Node 22
Вопрос
CommonJS-код в Node 22.17 делает require("./lib.mjs"). В lib.mjs есть top-level await. Что будет?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Ошибка ERRREQUIREASYNCMODULE. С Node 22.12 require() умеет загружать ES-модули синхронно, но только если в графе нет top-level await.
Варианты ответа
- Модуль загрузится, а require вернёт Promise
- Сработает, только если запустить с
--experimental-modules - Модуль загрузится, await будет проигнорирован
- Ошибка
ERR_REQUIRE_ASYNC_MODULEправильный ответ
Разбор
С Node 22.12 require() умеет загружать ES-модули синхронно, но только если в графе нет top-level await. Иначе синхронно загрузить нельзя, и Node бросает ERR_REQUIRE_ASYNC_MODULE. Выход: await import("./lib.mjs").
- Промис возвращает
import(), а неrequire(). - Игнорировать await Node не может, это изменило бы семантику.
- Флаг
--experimental-modulesдавно не нужен и эту проблему не решает.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.