Зачем нужны бандлеры

↑ 6.2 Сборка и инфраструктура: Vite, monorepo, CI∕CD · → Следующая

Желательно~3 мин чтенияУровень: middle

Зачем это на собесе

«Что делает сборщик и почему нельзя просто подключить файлы?» — вопрос про основы современной разработки.

Объяснение

Бандлер строит граф зависимостей от точки входа и превращает исходники в оптимизированные артефакты для браузера.

ЗадачаКак решает
Модулисклеивает import/export, npm-пакеты в бандлы/чанки
ТранспиляцияTS/JSX/SFC → JS, современный синтаксис → целевые браузеры (Babel/esbuild/SWC)
ПрепроцессорыSCSS/Less, PostCSS, автопрефиксы
МинификацияTerser/esbuild: короче код и имена
Tree shakingудаление неиспользуемых экспортов
Code splittingотдельные чанки для маршрутов и тяжёлых библиотек
Ассетыизображения, шрифты, SVG: хэширование, встраивание малых файлов
Cache bustingимена с хэшем содержимого (app.3f9a1c.js)
Dev-серверHMR (горячая замена модулей), прокси, source maps
Окруженияimport.meta.env, define
Полифиллыпо целевым браузерам (browserslist)

Зачем это нужно, если есть нативные ES-модули: сотни модулей = сотни запросов; нет TS/SFC; npm-пакеты в формате CJS; нет минификации/хэширования; нужны браузеры-цели.

Инструменты: Vite (dev — нативные ESM + esbuild, prod — Rollup; сейчас Rolldown), webpack (гибкий, зрелый), Rollup (библиотеки), esbuild/SWC (скорость), Parcel, Turbopack, Rspack (webpack-совместимый на Rust).

Результат сборки: HTML + JS/CSS-чанки + ассеты + source maps + манифест.

Нюансы и подводные камни

  • Размер бандла влияет на LCP/TTI: анализируйте (rollup-plugin-visualizer).
  • Дублирование зависимостей (разные версии) раздувает бандл.
  • Динамические импорты создают чанки, но не «бесплатны».
  • Пакеты без sideEffects: false/в CJS плохо tree-shake’ятся.
  • Разные окружения dev/prod ведут себя по-разному — проверяйте vite preview.

Практика

  1. Соберите проект и изучите структуру dist, размеры чанков.
  2. Посмотрите граф бандла визуализатором.
  3. Сравните dev-сервер Vite и webpack по скорости холодного старта.

Вопросы с ответами

Связанные темы