Архитектура фронтенда
Пайплайны сборки: тест с выбором ответа
Шесть вопросов поперёк всего юнита. Каждый отражает решение, которое ты принимаешь, пока бандл регрессирует, dev-only баг уезжает в прод или стадия сборки выбивает таймаут в CI — не определение для заучивания, а компромисс, который надо взвесить.
Убедись, что связываешь пять стадий пайплайна, причины провала tree-shaking, причины расхождения dev и prod и компромиссы content hashing и выбора инструмента — тот синтез, к которому вёл обзорный урок.
Коллега меняет import debounce from 'lodash/debounce' на import _ from 'lodash', и основной бандл вырастает на ~200 KB. Почему tree-shaking не выкинул неиспользуемые функции?
Чистая ESM-библиотека утилит всё равно тащит мёртвый код после сборки, хотя все импорты выглядят неиспользуемыми. Наиболее вероятная причина?
Фича работает в dev-сервере Vite, но ломается после vite build. Какова наиболее вероятная структурная причина, а не разовая случайность?
Почему замена Babel на esbuild или SWC срезает стадию transform на 90%+, а стадия bundle редко получает такое же ускорение?
Вернувшиеся пользователи перекачивают большой vendor-чанк при каждом деплое приложения, хотя React и зависимости не менялись. Фикс?
Исходник — чистый ESM, но prod-бандл всё равно тащит целую зависимость, которую должен был отшейкать. Подозреваемая — стадия transform. Почему?
Сквозная линия: сборка — это resolve → transform → bundle → minify → emit, и стыки между стадиями — это где живут баги. Tree-shaking требует статического ESM, поэтому его ломают CommonJS, необъявленные side effects и transform-ы, понижающие ESM до CJS до того, как bundler заглянет. Transform параллелен (поэтому там выигрывают компилируемые инструменты), а bundle остаётся последовательным. Dev и prod гоняют разные инструменты — валидируй реальную prod-сборку. И content hashing окупается только если отделить стабильный vendor-код от часто меняющегося кода приложения.