Выбор ответа Middle Модули обновлено
__dirname в ES-модуле Node
Вопрос
Код перенесли из CommonJS в ESM (.mjs) в Node.js 22. Что будет со строкой path.join(__dirname, 'data.json')?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: ReferenceError: dirname нет; замена: import.meta.dirname. dirname, filename, require, module и exports это параметры обёртки CommonJS-модуля, в ESM их нет, и обращение бросает ReferenceError.
Варианты ответа
- Всё работает как прежде: Node подставит путь к файлу
__dirnameбудет пустой строкой, и путь станет относительным- ReferenceError:
__dirnameнет; замена:import.meta.dirnameправильный ответ __dirnameукажет на корень проекта, где лежитpackage.json
Разбор
__dirname, __filename, require, module и exports это параметры обёртки CommonJS-модуля, в ESM их нет, и обращение бросает ReferenceError. В Node 20.11+ есть import.meta.dirname и import.meta.filename; универсальный вариант: fileURLToPath(new URL('.', import.meta.url)). Пустой строки или подстановки корня проекта не происходит.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.