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