Назад к вопросам
Junior
201
questionbank

Что такое ES-модули?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

ES-модули — это стандартный способ организации кода в JavaScript, основанный на синтаксисе import и export.

Основные особенности:

  • Стандарт: Часть спецификации ECMAScript, поддерживаемая большинством современных браузеров и сред выполнения, таких как Node.js.
  • Явное управление зависимостями: Модули явно указывают, какие значения они экспортируют и какие значения импортируют из других модулей.
  • Статическая структура: Зависимости модулей определяются на этапе компиляции (или парсинга), а не выполнения. Это позволяет инструментам статического анализа, таким как бандлеры (Webpack, Rollup), оптимизировать код.
  • Изоляция: Каждая переменная, функция или класс, объявленные внутри модуля, по умолчанию являются локальными для этого модуля. Чтобы быть доступными извне, их необходимо явно экспортировать.
  • Поддержка асинхронности: Модули могут загружаться асинхронно в браузерах, не блокируя загрузку страницы.

Синтаксис:

  • Экспорт:
    // app.js
    export const myVariable = 123; // Именованный экспорт
    export function myFunction() { // Именованный экспорт
      console.log('Hello from module!');
    }
    export default class MyClass { // Экспорт по умолчанию
      constructor() {
        console.log('MyClass instance created');
      }
    }
    
  • Импорт:
    // main.js
    import { myVariable, myFunction } from './app.js'; // Именованный импорт
    import MyDefaultClass from './app.js'; // Импорт по умолчанию
    
    console.log(myVariable); // 123
    myFunction(); // Hello from module!
    const instance = new MyDefaultClass(); // MyClass instance created
    

Сравнение с CommonJS (Node.js):

Особенность ES-модули CommonJS
Синтаксис import, export require, module.exports, exports
Зависимости Статические (определяются до выполнения) Динамические (определяются во время выполнения)
Загрузка Асинхронная (в браузере) Синхронная
this в корне undefined module.exports
Поддержка Браузеры, Node.js (по умолчанию с версии 13.2, через флаг --experimental-modules до этого) В основном Node.js

Использование ES-модулей является рекомендуемым подходом для современной frontend-разработки благодаря их стандартизации, лучшей поддержке инструментами и возможности статического анализа.