ESM против CommonJS
Вопрос
Чем модули ES отличаются от CommonJS?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
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 ошибок.