Почему после сборки всех js файлов в консоли ссылки идут на отдельные файлы, а не на общий собранный?

Webpack это инструмент для сборки JavaScript модулей. Когда мы используем Webpack для сборки наших JS файлов, он выполняет следующие шаги:

1. Анализ зависимостей: Webpack анализирует ваши JavaScript файлы и определяет зависимости между ними. Например, если у вас есть файл app.js, который импортирует модуль utils.js, то Webpack поймет, что app.js зависит от utils.js.

2. Создание графа зависимостей: Webpack использует информацию о зависимостях для создания графа зависимостей. Это означает, что Webpack определяет порядок, в котором модули должны быть собраны и каким образом они связаны.

3. Транспиляция и объединение файлов: Webpack выполняет транспиляцию и объединение файлов. Он применяет загрузчики (loaders) к файлам, чтобы преобразовать их в понятный браузеру формат (например, Babel для преобразования ES6 в ES5) и объединяет их в один или несколько файлов. Обычно, один из собранных файлов называется "bundle.js".

4. Генерация HTML файла: Webpack генерирует HTML файл, который содержит ссылки на собранные JavaScript файлы. По умолчанию, он генерирует тег <script>, который указывает на "bundle.js" и другие файлы, если таковые есть. Таким образом, при запуске приложения, HTML файл загружается в браузер, и браузер загружает и исполняет JavaScript файлы.

Теперь, почему ссылки идут на отдельные файлы, а не на общий собранный?

Вариант 1: Режим разработки
Когда вы запускаете проект в режиме разработки (mode: 'development'), Webpack будет генерировать отдельные JS файлы для каждого модуля. Это делается для обеспечения удобства отладки - вы можете видеть каждый модуль как отдельный файл и моментально обновлять только тот модуль, который изменился, без необходимости перезагрузки всего приложения. Это также позволяет избежать пересылки ненужного кода при каждом изменении.

Вариант 2: Режим продакшн
Когда вы запускаете проект в режиме продакшн (mode: 'production'), Webpack по умолчанию объединяет все модули в один файл, называемый "bundle.js". Это делается для оптимизации загрузки приложения - браузеру приходится загрузить только один файл, а не множество отдельных файлов. Также, при этом работает кэширование - если пользователь уже загрузил "bundle.js", то при следующем обращении к сайту, браузер будет его брать из кэша, что ускорит загрузку и экономит трафик.

Таким образом, выбор между отдельными файлами и общим сборкой зависит от режима разработки или продакшн, в котором вы запускаете проект. В режиме разработки, удобно иметь отдельные файлы для каждого модуля, в режиме продакшн, удобнее иметь единый файл для оптимизации загрузки. Вы можете настроить это поведение, используя соответствующие параметры в конфигурации Webpack (например, optimization.splitChunks для объединения модулей в отдельные файлы или output.filename для установки имени собранного файла).