Вопрос с собеседования · 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 минут бесплатно.

Разбор собеседования