01. Modules

The modularity solves next issues:

  • code isolation,

  • dependency definition between modules,

  • delivering of the code into execution environment.

Модуль - это инкапсулированный блок кода, экспортирующий конкретные интерфейсы для использования другими модулями.

  • Модулем в ES6 считается любой .js-файл с кодом.

  • Одному файлу соответствует один модуль и наоборот.

  • Внутри модуля могут находится объявления переменных, исполняемый код и т.д.

  • Все объявления переменных локальны внутри модуля.

  • Содержимое модуля в по умолчанию выполняется в строгом режиме.

  • Модуль выполняется один раз при загрузке. Первый импорт запускает выполнение тела модуля.

  • Даже если модуль импортируется множество раз, существует только один экземпляр модуля и его переменных.

  • В модуле ключевым словом export помечаются переменные и функции, которые могут быть использованы за пределами данного модуля, при помощи import выражения в другом модуле.

  • Модуль может подключать определения в других модулях при помощи декларации import.

  • Всегда выполняется импорт определений (bindings), а не значений.

  • Модули в ES6 resolved at compile-time.

//------ lib.js ------
export const sqrt = Math.sqrt;
export function square(x) {
  return x * x;
}
export function diag(x, y) {
  return sqrt(square(x) + square(y));
}

//------ main.js ------
import { square, diag } from "lib";
console.log(square(11)); // 121
console.log(diag(4, 3)); // 5

Стандарт модулей ES6 отличается от предыдущих наработок прежде всего тем, что это стандарт. До этого модули в JS реализовывались или при помощи библиотек или при помощи сборщиков. NodeJS имеет собственную модульную систему, но на не реализована в браузерах.

Целью разработки модулей в ES6 являлось создание общего фундамента для единой модульной системы

  • Компактный синтаксис;

  • Compile-time резолюция модулей (for static checking, optimization, etc.);

  • Поддержка одиночного и множественного экспорта;

  • Поддержка циклических зависимостей;

  • Поддержка асинхронной загрузки модулей;

  • Конфигурация загрузки модулей;

Стандарт модулей из ES6 включает в себя:

  • Спецификация модуля.

  • Декларативный синтаксис экспорта/импорта модулей.

  • Спецификация загрузчика модулей.

Преимущества модулей:

  • Решают проблему конфликта имен, глобального объекта и глобальной области видимости.

  • Модульность и пере-использование кода.

  • Улучшается поддерживаемость кода.

  • Удобный экспорт по умолчанию (основной сценарий использования).

  • Компактный синтаксис.

  • Статическая структура зависимостей, позволяющая ряд оптимизаций

  • import происходит только на верхнем уровне программы.

  • Поддержка как синхронного, так и асинхронного режима при едином синхронном синтаксисе.

  • Поддержка циклических зависимостей.

Last updated