Перейти к содержанию

Сборка frontend-приложений

Требования этого документа применяются к сборке production-артефакта frontend-приложений профилей CSR, SSR, SSG и edge по frontend/rendering-profiles.md. Контейнеризация serving-слоя регулируется документом deployment/dockerfile.md, а изолированный локальный запуск — документом development/project-execution.md. Общие требования к воспроизводимости, идентификации и продвижению артефакта определены в DEV-BUILD-001DEV-BUILD-005. Уровни обязательности определены в корневом README.md.

FE-BUILD-003. Source maps для атрибуции ошибок

Уровень: MUST

Применяется к: production-сборке, предназначенной для расследования ошибок

Сборка должна создавать source maps для поставляемого bundle и загружать их в GlitchTip, связывая с release-идентификатором по FE-ERR-005. Source maps должны позволять восстановить исходное имя файла, позицию и имя символа в minified-коде.

Неminified исходный код и source maps не должны публично отдаваться конечным пользователям, если доступ к ним не защищён и не является явным решением проекта. Source maps не должны содержать значения секретов, отсутствующие в поставляемом bundle.

Обоснование

Без source maps трассировка стека minified-кода в GlitchTip бесполезна для расследования; публичная публикация исходников может быть нежелательной.

Проверка

  • тест атрибуции тестовой ошибки в GlitchTip после upload;
  • проверка отсутствия source maps в публично отдаваемых путях;
  • review процесса загрузки maps и release-идентификатора.

Исключения

Source maps не требуются для окружения без сбора ошибок по FE-ERR-001.

FE-BUILD-004. Целостность и хеширование статических ресурсов

Уровень: MUST

Применяется к: каждому статическому ресурсу production-артефакта

Имя файла ресурса, кэшируемого на длительный срок, должно содержать стабильный хеш содержимого. Одинаковые входные данные должны давать одинаковый хеш. Отдающая сторона должна помечать такие ресурсы как immutable с длительным сроком кэширования.

Ресурс, входящий в комплект поставки, должен быть однозначно сопоставим с проверенным commit. HTML, указывающий на ресурсы, должен ссылаться на их актуальные хешированные имена.

Публикация новой версии HTML не должна опережать доступность её хешированных ресурсов, а ресурсы предыдущей версии должны оставаться доступными в течение срока кэширования старого HTML. Поэтапная замена экземпляров serving-слоя регулируется DEP-ROL-001.

Обоснование

Хеширование содержимого позволяет безопасное длительное кэширование и делает расхождение между HTML и ресурсами обнаружимым.

Проверка

  • повторная сборка и сравнение хешированных имён;
  • проверка заголовков кэширования immutable-ресурсов;
  • проверка согласованности ссылок HTML и имён ресурсов.

Исключения

Ресурс, изменяющий содержимое без изменения имени (например, service worker), должен иметь явную стратегию обновления и инвалидации кэша; для service worker применяется FE-OFF-004.

FE-BUILD-005. Минимальное содержимое production bundle

Уровень: MUST

Применяется к: финальному production-артефакту

Production-артефакт должен содержать только файлы, необходимые для работы приложения у конечного пользователя: production-код, production-зависимости, необходимые ресурсы и манифесты.

Исходный код в неminified виде, tests, fixtures, devDependencies, sourcemaps, инструменты разработки, документация сборки, файлы окружения разработки и карты конфигурации секретов не должны попадать в отгружаемый bundle.

Обоснование

Лишние файлы увеличивают размер загрузки, поверхность атаки и вероятность утечки данных сборки.

Проверка

  • анализ состава production-артефакта;
  • проверка отсутствия devDependencies и тестовых файлов в bundle;
  • review включения модулей и tree-shaking.

Исключения

Polyfill, необходимый для объявленной по FE-COMP-001 матрицы браузеров, должен оставаться в bundle.