1. Что такое Webpack
Webpack — это статический сборщик модулей для JavaScript-приложений. В отличие от старых инструментов вроде Grunt и Gulp, которые выполняли задачи последовательно, Webpack строит граф зависимостей вашего приложения и оптимально упаковывает всё в бандлы.
Историческая справка
Заголовок раздела «Историческая справка»До Webpack JavaScript-разработчики сталкивались с серьёзными проблемами:
- Управление порядком
<script>тегов в HTML вручную - Глобальные переменные и конфликты имён
- Невозможность использовать
require/importв браузере - Ручная конкатенация файлов для оптимизации
Webpack решил все эти проблемы, введя концепцию модульной системы для браузера.
Граф зависимостей (Dependency Graph)
Заголовок раздела «Граф зависимостей (Dependency Graph)»Когда Webpack обрабатывает ваш проект, он начинает с точки входа (entry point) и рекурсивно строит граф всех зависимостей:
// index.js (entry)import App from './App'; // → App.js → Button.js, Header.jsimport './styles.css'; // → styles.css → variables.cssimport logo from './logo.svg'; // → logo.svg (asset)Webpack “видит” весь этот граф и принимает оптимальные решения о бандлинге:
- Какие модули объединить в один бандл
- Какие вынести в отдельные чанки (code splitting)
- Какие оставить как есть (external)
Pipeline обработки: Entry → Loader → Plugin → Output
Заголовок раздела «Pipeline обработки: Entry → Loader → Plugin → Output»┌─────────┐ ┌──────────────────────────────────┐ ┌────────┐│ Entry │───▶│ Dependency Graph Resolution │───▶│ │└─────────┘ │ ┌─────────────────────────────┐ │ │ │ │ │ Module Processing │ │ │ Output │ │ │ TS → Babel → JS │ │ │ │ │ │ SCSS → PostCSS → CSS │ │ │ dist/ │ │ │ PNG → base64/file │ │ │ │ │ └─────────────────────────────┘ │ │ │ │ ┌─────────────────────────────┐ │ │ │ │ │ Plugin Hooks │ │ │ │ │ │ HtmlWebpackPlugin │ │ │ │ │ │ MiniCssExtractPlugin │ │ │ │ │ └─────────────────────────────┘ │ │ │ └──────────────────────────────────┘ └────────┘Основные концепции
Заголовок раздела «Основные концепции»module.exports = { mode: 'development', // 'production' | 'none'};- development: быстрая сборка, source maps, удобный debug
- production: минификация, tree shaking, оптимизация
Module System Support
Заголовок раздела «Module System Support»Webpack понимает все форматы модулей:
- ESM:
import/export - CommonJS:
require()/module.exports - AMD:
define()/require() - Assets: CSS, изображения, шрифты
Resolve
Заголовок раздела «Resolve»Webpack умеет разрешать пути:
resolve: { extensions: ['.tsx', '.ts', '.js'], alias: { '@': path.resolve(__dirname, 'src'), },}Жизненный цикл сборки
Заголовок раздела «Жизненный цикл сборки»- Initialization — загрузка конфига, создание компилятора
- Make — обход графа зависимостей, применение лоадеров
- Seal — оптимизация, разбивка на чанки
- Emit — запись файлов в
output.path - Done — финальные хуки, вывод статистики
Ниже — интерактивная визуализация графа зависимостей. Нажимайте на узлы чтобы исследовать связи.