Вопрос с собеседования · Frontend
Чем ES-модули отличаются от CommonJS?
JuniorОсновы JavaScript
Ещё спрашивают так:
- Что такое require и module.exports?
Коротко
CommonJS — исторический формат Node.js: require() и module.exports, загрузка синхронная и динамическая (require можно вызвать где угодно). ES-модули — стандарт языка: import/export, статическая структура, асинхронная загрузка, работают и в браузере, и в Node.js. Статичность ESM даёт tree shaking и надёжный анализ. Новый код пишут на ESM; в Node.js ESM включается "type": "module" в package.json или расширением .mjs.
- Импорт CommonJS из ESM обычно работает, обратное — через import()
- Библиотеки часто публикуют обе сборки
- __dirname нет в ESM — есть import.meta.url
Подробно
// CommonJS
const fs = require('fs');
module.exports = { read };
// ESM
import fs from 'node:fs';
export { read };Что хотят услышать
- require против import.
- Статичность ESM и tree shaking.
- Как включить ESM в Node.js.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗CommonJS — стандарт браузеров, а ESM работает только в Node.js и не поддерживает статический анализ кода
- ✗ESM и CommonJS ничем не отличаются, кроме синтаксиса
- ✓CommonJS — динамический синхронный require; ESM — статические import/export, стандарт, tree shaking
- ✗require можно использовать в браузере без сборщика
Связанные вопросы
Партнёр платформы
Разбор собеседования
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.