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

Поле exports в package.json

Вопрос

В пакете my-lib есть "exports": { ".": "./dist/index.js" }. Что будет при import x from "my-lib/dist/helpers.js"?

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

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

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

Коротко

Правильный ответ: Ошибка ERRPACKAGEPATHNOTEXPORTED. Поле exports перечисляет публичные точки входа и закрывает всё остальное, и для import, и для require.

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

  1. Импорт сработает, ведь файл существует
  2. Сработает только в CommonJS
  3. Ошибка ERR_PACKAGE_PATH_NOT_EXPORTEDправильный ответ
  4. Node вернёт ./dist/index.js вместо запрошенного файла

Разбор

Поле exports перечисляет публичные точки входа и закрывает всё остальное, и для import, и для require. Так автор пакета защищает внутренние файлы от использования.

  • Наличие файла не важно, если путь не объявлен в exports.
  • Ограничение действует для обеих систем модулей.
  • Подмены пути на главный файл нет, будет ошибка.

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

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

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