Назад к вопросам
Middle
132
questionbank
В чем разница между модулями ES и CommonJS?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Модули ES (ECMAScript) — это стандартный способ работы с модулями в JavaScript, определенный в спецификации ECMAScript 2015 (ES6). Используют синтаксис import и export.
CommonJS — это система модулей, широко используемая в среде Node.js. Использует синтаксис require() и module.exports.
Основные отличия:
-
Синтаксис:
// ES Modules import React from 'react'; export const myVar = 'hello';// CommonJS const React = require('react'); module.exports.myVar = 'hello'; -
Загрузка:
- ES Modules: Загружаются асинхронно (хотя синтаксис выглядит синхронно в статическом анализе). Подходит для браузеров и Node.js.
- CommonJS: Загружаются синхронно. В основном используется в Node.js.
-
Разрешение зависимостей:
- ES Modules: Статическое разрешение во время компиляции или загрузки. Позволяет выполнять деревьястряхивание (tree-shaking).
- CommonJS: Динамическое разрешение во время выполнения.
-
Связывание (Binding):
- ES Modules: Связывание "живое" (live binding). Изменения в экспортируемом значении отражаются в импортирующем модуле.
- CommonJS: Связывание по значению (copy of value). Изменения в исходном модуле не влияют на импортированный.
-
thisв глобальной области видимости:- ES Modules:
thisравноundefined. - CommonJS:
thisравноmodule.exports.
- ES Modules:
Таблица сравнения:
| Характеристика | ES Modules | CommonJS |
|---|---|---|
| Синтаксис | import, export |
require(), module.exports |
| Загрузка | Асинхронная (статический анализ) | Синхронная |
| Разрешение зависимостей | Статическое | Динамическое |
| Связывание | Живое (live binding) | По значению (copy of value) |
this в глобальной |
undefined |
module.exports |
| Использование | Браузеры, Node.js | Node.js |
| Деревьястряхивание | Поддерживается | Не поддерживается напрямую |