PassFront
  1. PassFront
  2. База знаний
  3. Современный JS ES6+

Как взаимодействовать с модулем не находясь внутри него?

Современный JS ES6+

С модулем взаимодействуют извне через его экспортируемый интерфейс (`export`/`import`): модуль явно экспортирует то, что доступно снаружи, остальное остаётся приватным.

Экспорт — публичный интерфейс

Модуль решает, что доступно извне, через export:

// module.js
export function publicFn() {}      // доступно снаружи
export const PUBLIC = 1;
const privateVar = 'скрыто';        // недоступно снаружи
function privateHelper() {}         // приватная

Импорт — использование снаружи

Другой модуль импортирует экспортированное:

import { publicFn, PUBLIC } from './module.js';
publicFn(); // взаимодействие с модулем извне

Формы взаимодействия

Именованный экспорт/импорт

export function fn() {}
import { fn } from './module.js';

Экспорт по умолчанию

export default class {}
import MyClass from './module.js';

Импорт всего пространства

import * as utils from './module.js';
utils.fn();

Динамический импорт

const mod = await import('./module.js');

Инкапсуляция

Модуль имеет свою область видимости — приватные переменные/функции не видны снаружи. Взаимодействие только через явный экспортируемый API. Это инкапсуляция на уровне модуля.

Коротко для собеседования

С модулем извне взаимодействуют через его экспортируемый интерфейс: модуль объявляет публичное через export (именованный или default), остальное приватно (своя область видимости). Снаружи используют через import. Формы: именованный, default, import *, динамический import(). Это инкапсуляция на уровне модуля.

Другие вопросы раздела