Как работают модули?
Современный JS ES6+
Модули работают через изолированную область видимости и явные `export`/`import`: каждый модуль имеет своё пространство, экспортирует нужное и импортирует зависимости. Они загружаются и выполняются один раз.
Как устроены ES-модули
Экспорт
// utils.js
export const PI = 3.14; // именованный
export function sum(a, b) { return a + b; }
export default class Calculator {} // по умолчаниюИмпорт
import Calculator, { PI, sum } from './utils.js';
import * as utils from './utils.js'; // всё пространство
const mod = await import('./utils.js'); // динамическийОсобенности
- Своя область видимости — переменные модуля не глобальны (нет конфликтов).
- Строгий режим по умолчанию.
- Статичность —
import/exportанализируются при сборке → возможен tree shaking. - Синглтон — модуль выполняется один раз; при повторном импорте берётся кешированный экземпляр.
- Отложенное выполнение — модули загружаются как
defer. - Живые связи — импортированные значения отражают изменения в модуле (live bindings).
Форматы
- ES Modules (ESM) — стандарт (
import/export), браузер и Node. - CommonJS — Node (
require/module.exports), синхронный, динамический.
Как выполняются
Браузер строит граф зависимостей, загружает модули (параллельно), выполняет один раз в порядке зависимостей.
Коротко для собеседования
Модули имеют изолированную область видимости, экспортируют через export и импортируют через import, работают в строгом режиме. Статичны (tree shaking), выполняются один раз (кеш/синглтон), с живыми связями. ESM — стандарт (import/export), CommonJS — Node (require).