Выбор ответа Junior Модули и npm обновлено

__dirname в ES-модуле

Вопрос

В .mjs-файле в Node 22 нужно получить путь к папке текущего файла. Как правильно?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: import.meta.dirname. В ESM нет обёртки CommonJS, поэтому dirname, filename и require не определены.

Варианты ответа

  1. __dirname
  2. import.meta.dirnameправильный ответ
  3. process.cwd()
  4. require.main.path

Разбор

В ESM нет обёртки CommonJS, поэтому __dirname, __filename и require не определены. В Node 22 есть import.meta.dirname и import.meta.filename; в старых версиях делали path.dirname(fileURLToPath(import.meta.url)).

  • __dirname в ESM даст ReferenceError.
  • process.cwd() это папка, откуда запущен процесс, а не папка файла.
  • require в ESM недоступен.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме