# П12 · 2019-02 · ES-модули в браузере
Статус: **принят в публикационный слой 31 июля 2026 года**. Registry
накладывает ревизии только по стабильному slug; дата и автор остаются у
базового архива.
## Граница пакета
- Slug: editorial-2019-02-practice-es-modules, editorial-2019-02-mechanism-es-modules, editorial-2019-02-field-es-modules.
- Голос: М2, 2019 год. Автор переносит практику диагностики из PHP/Bitrix на границу браузера, URL и сборщика; не выдаёт себя за владельца большой платформы.
- Три разных вопроса: минимальный native start; отличие браузерной URL-резолвации от этапа Webpack; диагностика двух module identity и ошибочного пути.
- Все примеры помечены как учебные. В тексте нет заявления о настоящем browser trace, чужой production-сборке или измерении задержки.
- Первичные источники: ECMAScript 2019, HTML Living Standard для script/module map и Fetch Standard для CORS. Для исторического ракурса native-примеры намеренно не используют import map, aliases и package resolution.
## Pass 1 — факты и техника
- Проверена граница стандартов: ECMAScript задаёт синтаксис и граф import/export, HTML задаёт загрузку, резолвацию URL и время вычисления module script.
- Сверен native start: module script без async загружает граф параллельно разбору и вычисляется после разбора документа; defer не создаёт для module script отдельный режим.
- Сверен путь: URL-подобные ./, ../ и / разрешаются от base URL импортёра. Браузер не обязан подставлять .js и не наследует aliases или package lookup Webpack.
- Сверена identity: module map ключуется URL и типом. Отличный query создаёт отдельную identity; одинаковый нормализованный URL повторно не вычисляется в том же документе.
- В полевой статье status 200 не объявлен достаточным доказательством: отдельно проверяются Response, Content-Type, Initiator и CORS.
- В механической статье порядок зависимость → потребитель показан на учебном графе, а циклические импорты и два entry названы ограничениями.
- Вердикт: соответствует. Bundler-поведение нигде не названо браузерной спецификацией.
## Pass 2 — редактура и голос
- Первые одно-два предложения каждого текста называют симптом и цену ошибки: пустой интерфейс, лишняя конфигурация, двойная инициализация или ложный ремонт.
- У каждого материала один главный вопрос и единая цепочка: симптом → причина → проверка → действие → ограничение.
- Тон короткий и предметный: наблюдения привязаны к URL, Network, Content-Type, entry, import.meta.url или конфигурации, а не к общим оценкам.
- М2-словарь ограничен ES-модулем, графом зависимостей, entry, asset, URL, chunk и source-механикой. Поздние рамки уровня SLO, Kubernetes, OpenTelemetry и организационные метрики не добавлены.
- Объём основного текста, который посчитал draft gate: practice — 7 998; mechanism — 7 831; field — 8 306 знаков. Во всех трёх 8–9 разделов, таблица с thead и scope, code, ordered list, figure, ограничения и точный раздел источников.
- Вердикт: соответствует голосу автора 2019 года. Из текста удалены универсальные обещания и неподтверждённый личный опыт.
## Pass 3 — визуал и выпуск
- Созданы три разные объясняющие SVG: граф native start, граница browser/Webpack и диагностика URL identity.
- XML каждого SVG валиден. У каждой figure есть осмысленный alt и подпись, которые передают причинную модель без чтения текста внутри картинки.
- SVG открыты в локальном HTTP-preview при ширинах 1280 и 375 px. После узкого прохода схемы переведены в вертикальную композицию: все блоки, стрелки и ключевые метки остаются видимыми, текст не обрезан, горизонтального overflow нет.
- Проверена существующая разметка выпуска: .article-content figure img имеет width: 100%, а .table-scroll включает overflow-x: auto и таблице задан min-width. Пакет использует именно эти контейнеры.
- Передача в архив не производилась; production build не заявляется как выполненная, потому что автономный черновик не меняет data/articles.json.
- Вердикт: готов к интеграционному ревью.
## Фактические проверки
| Проверка | Команда или метод | Результат |
| --- | --- | --- |
| Синтаксис модуля | node --check scripts/upgrade-2019-02.mjs из web | PASS |
| Import-safe и JSON-only CLI | npm run audit:draft -- scripts/upgrade-2019-02.mjs из web | PASS: три revision, CLI совпадает с export |
| Контентный gate | та же команда audit:draft | PASS: 7 998 / 7 831 / 8 306 body chars |
| XML | xmllint --noout для трёх SVG из web | PASS |
| Статический preview | curl -I http://127.0.0.1:4173/assets/editorial/2019/es-modules-native-graph-2019.svg | PASS: 200, image/svg+xml |
| Визуал | локальный preview всех трёх SVG в браузере, 1280 и 375 px | PASS: без обрезания и горизонтального overflow |
| Границы фактов | ECMAScript 2019, HTML и Fetch primary sources | PASS: утверждения сверены перед редактурой |
## Выпусковой вердикт
После интеграции основной редактор повторно прогнал строгий аудит: все три
slug прошли объём 7 998 / 7 831 / 8 306 знаков, figure, таблицу, код,
маршрут действий и источники. npm run build завершился с
кодом 0 и сгенерировал 374 статические страницы.
Пакет принят к публикации. articles.json не менялся: registry
подменяет только редакционные поля по стабильному slug.