Как взаимодействовать с модулем не находясь внутри него?
Современный 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(). Это инкапсуляция на уровне модуля.