Что такое сборщик

Ответ

Сборщик (bundler) — инструмент, который объединяет модули, файлы и зависимости в один или несколько оптимизированных бандлов для production. Примеры: Webpack, Rollup, Parcel.

Основные функции:

  • Объединение JS, CSS, изображений и других ресурсов.
  • Минификация и оптимизация кода.
  • Транспиляция (например, Babel для ES6+).
  • Управление зависимостями.
  • Разделение кода (code splitting).

Пример конфига Webpack:

module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist'),
  },
  module: {
    rules: [
      { test: /.js$/, use: 'babel-loader' },
      { test: /.css$/, use: ['style-loader', 'css-loader'] },
    ],
  },
};

Ответ 18+ 🔞

Ну, слушай, давай я тебе на пальцах объясню, что это за зверь такой — сборщик. Представь, что у тебя есть куча мелких деталек: скрипты, стили, картинки, библиотеки всякие. И вот ты, такой умный, пишешь на ES6, импортируешь модули, а браузер старый, как говно мамонта, и говорит: «Не, братан, я это не жую». Вот тут-то и появляется этот самый бандлер, типа Webpack, Rollup или Parcel. Его задача — взять всю эту разрозненную хуйню, склеить в один или несколько аккуратных бандлов (пакетов), да ещё и оптимизировать так, чтобы даже у бабушки в IE10 всё летало. Ну, или почти летало.

Что он делает, этот волшебник?

  • Склеивает всё в кучу: JS, CSS, картинки, шрифты — всё, что нужно для твоего приложения.
  • Жмёт и оптимизирует: Убирает пробелы, комментарии, переименовывает переменные — делает код максимально лёгким, чтоб быстрее грузилось. Это называется минификация, блядь.
  • Транспилирует: Берёт твой модный ES6+ код и превращает его в старый добрый ES5, который понимают все браузеры. Обычно для этого цепляют Babel, который, по сути, переводчик с молодёжного на общепонятный.
  • Разруливает зависимости: Сам находит, какой файл от какого зависит, и подгружает их в правильном порядке. Не надо вручную десять скриптов в HTML пихать.
  • Делит код (code splitting): Это вообще магия. Можно сделать так, чтобы не весь код грузился сразу, а частями, по мере необходимости. Пользователь зашёл на страницу — загрузилось только то, что нужно для неё. Охуенно же!

Вот, смотри, как примерно выглядит конфиг Webpack'а, этот файл webpack.config.js:

module.exports = {
  entry: './src/index.js', // Отсюда начинается наш маршрут, точка входа, так сказать
  output: {
    filename: 'bundle.js', // А вот во что всё это великолепие превратится в итоге
    path: path.resolve(__dirname, 'dist'), // И сложится в папку 'dist'
  },
  module: {
    rules: [ // А вот тут правила, как обрабатывать разные файлы
      { test: /.js$/, use: 'babel-loader' }, // Все .js файлы пропустить через Babel
      { test: /.css$/, use: ['style-loader', 'css-loader'] }, // CSS — через специальные лоадеры
    ],
  },
};

Короче, без этого инструмента в современной фронтенд-разработке — как без рук. Сначала кажется, что это лишняя сложность, но потом, когда проект разрастается, понимаешь — это просто спасение, ёпта. Хуй с горы, если без него собирать вручную.