Ответ вслух Middle Модули обновлено

ESM против CommonJS

Вопрос

Чем модули ES отличаются от CommonJS?

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

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

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

Коротко

Импорты ESM разбираются до выполнения кода: сборщик знает граф зависимостей статически, отсюда tree shaking и проверка имён на этапе сборки. require в CommonJS - обычный вызов функции в рантайме, его можно поставить в условие, но и выкинуть неиспользуемое нельзя.

Что должно прозвучать в ответе

  • ESM статический - импорты разбираются до выполнения

  • CommonJS динамический - require выполняется в рантайме

  • статичность даёт tree shaking

  • в ESM экспорты - живые связи, в CJS - копия значения на момент require

  • ESM всегда в строгом режиме и грузится асинхронно

  • циклические зависимости ведут себя по-разному

Что могут спросить следом

  • Что такое tree shaking и что ему мешает
  • Почему export default хуже именованного для tree shaking
  • Как работает динамический import и где он полезен

Разбор

Импорты ESM разбираются до выполнения кода: сборщик знает граф зависимостей статически, отсюда tree shaking и проверка имён на этапе сборки. require в CommonJS - обычный вызов функции в рантайме, его можно поставить в условие, но и выкинуть неиспользуемое нельзя.

Экспорты ESM - живые связи: если модуль поменяет переменную, импортёр увидит новое значение. module.exports в CJS отдаёт значение на момент вызова. ESM всегда строгий режим, грузится асинхронно, и this на верхнем уровне - undefined, а не module.exports.

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

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