Модуль 12 · Урок 45

ES modules і dependency graph

Module робить dependencies явними: entry point імпортує мінімальний public API, internal bindings лишаються scoped, а browser резолвить relative specifier як URL відносно importing module.

type=moduleimport / exportModule graphPublic API

Browser module contract

<script type="module" src="/src/main.js"></script>

import { loadBooks } from './transport.js';
export function loadBooks() { /* ... */ }

Module scripts мають strict mode, deferred execution і власний scope; imported binding є live read-only view. У browser relative specifier потребує коректного path/case/extension і local HTTP server: file:// не є надійним test environment.

Graph, API і side effects

EntryComposition root.
CoreValues-to-values.
BoundaryDOM або transport.
Public APINamed exports.
GraphDirected imports.
QAResolution і cycles.

Default export допустимий, але named API краще показує контракт. Namespace import потрібний для grouped API, re-export — для deliberate facade, dynamic import() — для conditional/lazy boundary. Side-effect imports і cycles документують або усувають.

Практика

Заповніть dependency graph, module API register і resolution cases. Acceptance: немає hidden globals/cycles, internal binding не export «про запас», а wrong case/missing extension відтворено через Network/Console evidence.

Офіційні джерела

Практична перевірка · урок 45 з 60

Закріпіть матеріал уроку

Три сценарні питання. Для зарахування уроку потрібно дати щонайменше дві правильні відповіді.

1. Що вмикає browser ES module entry?
2. Який scope має module binding?
3. Як browser резолвить ./transport.js?