build-tools · 15 мин чтения

Vite vs Rspack vs esbuild в 2026: какой сборщик выбрать

Vite Rspack esbuild сборщик JavaScript Rolldown Webpack альтернатива bundler
Содержание

Скорость сборки JavaScript-проекта напрямую влияет на продуктивность команды. Когда разработчик нажимает Ctrl+S и ждёт три секунды обновления — это раздражает. Когда CI-пайплайн собирает продакшн-бандл 90 секунд — это стоит денег. В 2026 году экосистема JavaScript-сборщиков переживает тектонический сдвиг: инструменты, написанные на Rust и Go, окончательно вытесняют решения на чистом JavaScript. Три главных героя этой трансформации — Vite, Rspack и esbuild.

Vite выпустил бету восьмой версии с новым ядром Rolldown на Rust. Rspack завершил серию 1.x и готовится к переходу на 2.0. esbuild остаётся эталоном скорости, но его роль в экосистеме меняется. Эта статья — для фронтенд-разработчиков, техлидов и DevOps-инженеров, которые выбирают сборщик для нового проекта или рассматривают миграцию. Мы разберём архитектуру каждого инструмента, сравним производительность на реальных бенчмарках, покажем примеры конфигураций и дадим конкретные рекомендации.

Краткий обзор участников

Vite 8 — единый Rust-тулчейн с Rolldown

Vite появился в 2020 году как проект Эвана Ю (Evan You), создателя Vue.js. Изначально идея была проста: использовать нативные ES-модули браузера для мгновенного старта dev-сервера, а для продакшн-сборки применять Rollup. Для пребандлинга зависимостей в dev-режиме использовался esbuild. Эта архитектура «два бандлера» работала, но создавала проблему: поведение dev и production окружений могло расходиться.

В декабре 2025 года команда VoidZero выпустила Vite 8 Beta — первую версию, полностью работающую на Rolldown, новом бандлере, написанном на Rust. Rolldown заменяет одновременно esbuild и Rollup, создавая единый пайплайн для разработки и продакшена. Под капотом Rolldown использует Oxc — Rust-инструментарий для парсинга, резолвинга, трансформации и минификации JavaScript/TypeScript.

На GitHub Vite набрал более 70 000 звёзд, а npm-загрузки превышают 20 миллионов в неделю. Он используется как основа для фреймворков Nuxt, SvelteKit, Astro, Remix и Angular.

Ключевые нововведения Vite 8:

  • Full Bundle Mode — возможность бандлить все модули даже в dev-режиме, сокращая количество сетевых запросов в 10 раз
  • Встроенная поддержка tsconfig paths — резолвинг путей из TypeScript-конфигурации без плагинов
  • Module-level persistent cache — кеширование трансформаций на уровне модулей между перезапусками
  • Гибкий chunk split — более тонкий контроль над разбиением бандла на чанки
  • Module Federation — нативная поддержка для микрофронтенд-архитектур

Rspack 1.7 — совместимость с webpack на скорости Rust

Rspack был создан командой ByteDance (компания, стоящая за TikTok) и впервые представлен в 2023 году. Цель проекта — дать командам, инвестировавшим годы в экосистему webpack, путь к радикальному ускорению сборки без переписывания конфигураций, плагинов и лоадеров.

В январе 2026 года вышел Rspack 1.7 — финальный минорный релиз перед переходом на версию 2.0. На GitHub проект набрал более 10 500 звёзд, а темпы роста сообщества ускоряются.

Архитектура Rspack основана на Rust-ядре с многопоточным выполнением. При этом API конфигурации совместим с webpack: module.rules, plugins, resolve, optimization — всё знакомо. Большинство webpack-лоадеров работают без изменений, а многие популярные плагины имеют встроенные аналоги в Rspack.

Ключевые возможности Rspack 1.7:

  • Совместимость с SWC-плагинами — решена проблема поломки AST при обновлениях через переход на cbor-сериализацию
  • Native asset import — импорт бинарных файлов как Uint8Array через стандартный синтаксис import ... with { type: 'bytes' }
  • Lazy compilation по умолчанию — динамически импортируемые модули компилируются только при обращении
  • Стабилизация оптимизаций — constant inlining, TypeScript enum inlining и проверка type re-exports перешли из экспериментального статуса в стабильный

esbuild — эталон скорости на Go

esbuild был создан Эваном Уоллесом (Evan Wallace), сооснователем Figma, и впервые выпущен в 2020 году. Написанный на Go, он стал первым сборщиком нового поколения, который продемонстрировал, что JavaScript-бандлинг может быть в 10-100 раз быстрее webpack.

Официальные бенчмарки esbuild показывают сборку 10 копий библиотеки three.js за 0,33 секунды — против 41,53 секунды у webpack. На GitHub проект имеет более 38 500 звёзд и загружается около 100 миллионов раз в неделю через npm (большая часть — косвенно через Vite и другие инструменты).

esbuild позиционирует себя как низкоуровневый инструмент. У него минималистичный API, нет встроенной поддержки HMR, dev-сервера или фреймворк-специфичных трансформаций. Это скорее «движок», чем «готовый автомобиль». До появления Rolldown esbuild был де-факто стандартным транспилятором в dev-режиме Vite.

В 2025-2026 годах esbuild продолжает получать минорные обновления и исправления, но крупных новых фич не появляется. Его роль в экосистеме постепенно смещается: в Vite 8 Rolldown заменяет esbuild, а в других проектах он часто используется как быстрый транспилятор, а не полноценный бандлер.

Архитектура и принципы работы

Архитектурные различия между тремя инструментами — ключ к пониманию их сильных и слабых сторон.

Vite 8 (с Rolldown) работает по модели dev-сервера с нативными ES-модулями. При старте dev-сервера Vite анализирует граф зависимостей и бандлит тяжёлые библиотеки из node_modules через Rolldown. Исходные файлы проекта подаются браузеру как ES-модули, трансформируясь на лету. В продакшн-режиме Rolldown собирает весь проект в оптимизированный бандл. Oxc выполняет парсинг, трансформацию и минификацию — всё в одном Rust-процессе с минимальными накладными расходами на сериализацию.

Vite 8 Pipeline:
Dev:   Source → Rolldown pre-bundle → ESM serve → Browser
Prod:  Source → Rolldown bundle → Oxc minify → Output

Rspack следует классической модели webpack: полный граф модулей строится при старте, все модули проходят через цепочку лоадеров, затем оптимизируются и бандлятся. Разница в том, что парсинг, резолвинг модулей и кодогенерация выполняются в Rust с многопоточной обработкой. JavaScript-лоадеры запускаются в Node.js, но «мост» между Rust и JS оптимизирован для минимизации задержек.

Rspack Pipeline:
Source → Rust resolve → Loaders (JS/Rust) → Rust codegen → Output

esbuild реализует монолитную архитектуру: парсинг, резолвинг, линкинг и кодогенерация — всё в одном Go-процессе с агрессивным параллелизмом. Нет плагин-пайплайна уровня webpack, нет лоадеров в привычном понимании. Вместо этого — набор встроенных трансформаций (JSX, TypeScript, CSS modules) и минималистичный plugin API.

esbuild Pipeline:
Source → Go parse → Go link → Go codegen → Output
(всё в одном процессе, максимальный параллелизм)

Сравнительная таблица

КритерийVite 8 (Rolldown)Rspack 1.7esbuild
Язык ядраRust (Rolldown + Oxc)Rust + JS (лоадеры)Go
Dev-серверВстроенный, ESM-basedВстроенный (через Rsbuild)Нет (только watch + serve)
HMRДа, через ESMДа, через WebSocketНет встроенного
Продакшн-сборкаRolldownRspack coreesbuild
Совместимость с webpackНет (свой формат плагинов)Высокая (лоадеры + плагины)Нет
Rollup-совместимостьДа (через Rolldown)НетНет
CSS ModulesДаДаДа (встроенные)
TypeScriptДа, через OxcДа, через SWCДа (strip types)
Tree ShakingДаДаДа
Code SplittingДа, гибкийДаОграниченный
Module FederationДа (Vite 8)Да (встроенный)Нет
Persistent CacheДа (module-level)Да (filesystem)Нет
Ecosystem плагиновVite + Rollup плагиныwebpack лоадеры + плагиныОграниченный plugin API
Кол-во звёзд GitHub~70 000~10 500~38 500
npm загрузки/нед.~20 млн~2 млн~100 млн (косвенно)
Минимальная конфиг.vite.config.tsrspack.config.jsCLI / JS API
ФреймворкиVue, React, Svelte, Solid, AngularReact, Vue (через Rsbuild)Любой (низкоуровневый)

Бенчмарки производительности

Производительность — главный аргумент при выборе сборщика. Рассмотрим данные из нескольких источников.

Продакшн-сборка

Согласно бенчмаркам rstackjs/build-tools-performance на проекте с 5 000 React-компонентов:

ИнструментВремя сборки (cold)Время сборки (cache)
Vite 8 (Rolldown)~876 мс~500 мс
Rspack 1.7~1 200 мс~600 мс
esbuild~700 мс— (нет persistent cache)
webpack 5~10 900 мс~3 500 мс

Vite 8 с Rolldown демонстрирует впечатляющие результаты: реальный SPA-проект с библиотеками Mantine, TanStack React Query и react-router собирается за 0,8 секунды вместо 3,8 секунды на Vite 7 — ускорение в 5 раз.

Крупные компании подтверждают эти цифры. Команда Linear сократила время продакшн-сборки с 46 секунд до 6 секунд. Ramp сообщает о 57% сокращении времени сборки. Mercedes-Benz.io — до 38% ускорения. Beehiiv — 64% улучшение.

Dev-сервер (холодный старт)

На проекте с 10 000 модулями:

ИнструментВремя старта (cold)Время старта (cache)
Rsbuild (Rspack)~1 248 мс~800 мс
Vite 8~3 500 мс~1 200 мс
webpack 5~15 000 мс~5 000 мс

Rspack (через Rsbuild) лидирует в скорости запуска dev-сервера, особенно на крупных проектах. Это связано с его архитектурой полной бандлировки — все модули обрабатываются сразу в Rust, тогда как Vite выполняет ленивую трансформацию ESM-модулей, которая на больших проектах создаёт каскад сетевых запросов.

HMR (Hot Module Replacement)

ИнструментHMR (5k модулей)HMR (10k модулей)
Rsbuild (Rspack)~96 мс~153 мс
Vite 8~120 мс~200 мс
webpack 5~440 мс~2 821 мс

По скорости HMR инструменты нового поколения значительно опережают webpack, а разница между Rspack и Vite находится в пределах допустимой погрешности — оба обеспечивают практически мгновенное обновление.

Примеры конфигурации

Vite 8 — React-проект с TypeScript

// vite.config.ts
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'

export default defineConfig({
  plugins: [react()],

  // Новое в Vite 8: встроенная поддержка tsconfig paths
  resolve: {
    tsconfigPaths: true,
  },

  build: {
    // Rolldown используется автоматически
    rollupOptions: {
      output: {
        manualChunks: {
          vendor: ['react', 'react-dom'],
          router: ['react-router'],
        },
      },
    },
  },

  // Экспериментальный Full Bundle Mode для dev
  experimental: {
    fullBundleMode: true,
  },
})

Установка и запуск:

npm create vite@latest my-app -- --template react-ts
cd my-app
npm install
npm run dev   # dev-сервер на Rolldown
npm run build # продакшн-сборка на Rolldown

Rspack — миграция с webpack

// rspack.config.js
const { defineConfig } = require('@rspack/cli');
const { HtmlRspackPlugin } = require('@rspack/core');

module.exports = defineConfig({
  entry: './src/index.tsx',
  output: {
    filename: '[name].[contenthash].js',
    path: __dirname + '/dist',
    clean: true,
  },
  resolve: {
    extensions: ['.ts', '.tsx', '.js', '.jsx'],
    tsConfigPath: './tsconfig.json',
  },
  module: {
    rules: [
      {
        test: /\.(ts|tsx)$/,
        use: {
          loader: 'builtin:swc-loader',
          options: {
            jsc: {
              parser: { syntax: 'typescript', tsx: true },
              transform: { react: { runtime: 'automatic' } },
            },
          },
        },
      },
      {
        test: /\.css$/,
        type: 'css',
      },
      {
        test: /\.(png|jpg|svg)$/,
        type: 'asset',
      },
    ],
  },
  plugins: [
    new HtmlRspackPlugin({
      template: './public/index.html',
    }),
  ],
  optimization: {
    splitChunks: {
      chunks: 'all',
      cacheGroups: {
        vendor: {
          test: /[\\/]node_modules[\\/]/,
          name: 'vendor',
        },
      },
    },
  },
  // Lazy compilation включена по умолчанию в 1.7
  experiments: {
    lazyCompilation: true,
  },
});

Миграция с webpack в большинстве случаев сводится к замене зависимостей:

# Удаляем webpack
npm uninstall webpack webpack-cli webpack-dev-server

# Устанавливаем Rspack
npm install -D @rspack/core @rspack/cli

# Переименовываем конфиг (опционально)
mv webpack.config.js rspack.config.js

# Запускаем
npx rspack serve   # dev-сервер
npx rspack build   # продакшн

esbuild — быстрая сборка библиотеки

// build.mjs
import * as esbuild from 'esbuild';

// Сборка библиотеки в ESM и CJS форматах
const shared = {
  entryPoints: ['src/index.ts'],
  bundle: true,
  external: ['react', 'react-dom'],
  target: 'es2020',
  sourcemap: true,
  minify: true,
};

// ESM
await esbuild.build({
  ...shared,
  format: 'esm',
  outfile: 'dist/index.mjs',
});

// CommonJS
await esbuild.build({
  ...shared,
  format: 'cjs',
  outfile: 'dist/index.cjs',
});

console.log('Build complete');

Для dev-режима esbuild предоставляет watch API:

// dev.mjs
import * as esbuild from 'esbuild';

const ctx = await esbuild.context({
  entryPoints: ['src/index.tsx'],
  bundle: true,
  outdir: 'dist',
  format: 'esm',
  sourcemap: true,
});

// Запуск watch + serve
await ctx.watch();
const { host, port } = await ctx.serve({
  servedir: 'dist',
});
console.log(`Dev server: http://${host}:${port}`);

Экосистема и интеграции

Vite

Vite обладает самой развитой экосистемой среди трёх инструментов. Он является официальным сборщиком для Vue (через create-vue), поддерживается в React (официальный шаблон), Svelte (через SvelteKit), Solid, Qwik и Angular (экспериментально). Мета-фреймворки Nuxt, Astro и Remix используют Vite как основу.

Экосистема Vite-плагинов насчитывает сотни пакетов — от PWA и SSR до визуализации бандла. Плагины, написанные для Rollup, в большинстве случаев совместимы с Vite через слой обратной совместимости Rolldown.

Тестовый фреймворк Vitest нативно интегрируется с Vite, переиспользуя его конфигурацию и пайплайн трансформации.

Rspack

Главное преимущество Rspack — совместимость с экосистемой webpack. Большинство webpack-лоадеров (babel-loader, css-loader, sass-loader, file-loader) работают без изменений. Многие плагины имеют встроенные Rspack-аналоги: HtmlRspackPlugin (замена html-webpack-plugin), CssExtractRspackPlugin (замена mini-css-extract-plugin).

Для новых проектов рекомендуется использовать Rsbuild — высокоуровневую обёртку над Rspack с предустановленными конфигурациями и удобным API, аналогично тому, как Create React App был обёрткой над webpack.

Rspack нативно поддерживает Module Federation — технологию для микрофронтенд-архитектур, что делает его привлекательным выбором для крупных корпоративных проектов.

esbuild

Экосистема esbuild значительно скромнее. Plugin API существует, но он намеренно минималистичен — нет хуков на уровне отдельных модулей, нет системы лоадеров. Плагины могут перехватывать resolve и load, но глубокая трансформация AST недоступна.

esbuild часто используется как компонент внутри других инструментов: Vite (до версии 8) использовал его для пребандлинга, Snowpack строил на нём dev-сервер, а многие CI-системы применяют esbuild для быстрой компиляции TypeScript.

Когда выбрать каждый инструмент

Выбирайте Vite 8, если:

  • Начинаете новый проект — Vite предоставляет лучший developer experience из коробки с минимальной конфигурацией
  • Используете современный фреймворк — Vue, React, Svelte, Solid, Angular имеют первоклассную поддержку
  • Нужен быстрый dev-сервер и продакшн-сборка — Rolldown обеспечивает единый быстрый пайплайн
  • Планируете использовать SSR/SSG — Nuxt, Astro, SvelteKit, Remix построены на Vite
  • Важна экосистема плагинов — сотни Vite- и Rollup-совместимых плагинов
  • Нужна интеграция с Vitest — единая конфигурация для сборки и тестирования

Выбирайте Rspack, если:

  • Мигрируете с webpack — конфигурация, лоадеры и плагины совместимы, миграция минимальна
  • Инвестировали в webpack-экосистему — кастомные лоадеры, сложные конфигурации, специфичные плагины
  • Нужен Module Federation — нативная поддержка для микрофронтендов
  • Критична скорость холодного старта dev-сервера — Rspack/Rsbuild лидирует в бенчмарках на крупных проектах
  • Работаете с монорепозиторием — планируемый persistent cache и cloud caching в 2.0 ориентированы на монорепо
  • Корпоративный проект с legacy-кодом — webpack-совместимость позволяет мигрировать постепенно

Выбирайте esbuild, если:

  • Собираете библиотеку — минималистичный API идеален для сборки npm-пакетов в ESM/CJS форматы
  • Нужен максимально быстрый транспилятор — стрипание типов TypeScript, компиляция JSX без сборки бандла
  • Строите собственный инструмент — esbuild как компонент в вашем тулчейне
  • Проект прост и не требует dev-сервера — статический сайт, CLI-утилита, serverless-функция
  • Нужна предсказуемость — esbuild стабилен, минимален и не преподносит сюрпризов

Не стоит выбирать, если:

  • esbuild — если нужен HMR, сложный code splitting, Module Federation или экосистема плагинов
  • Rspack — если начинаете проект с нуля без webpack-наследия (Vite проще в настройке)
  • Vite — если проект глубоко завязан на webpack-плагины, которые не имеют Vite-аналогов

Миграция: практические советы

С webpack на Rspack

  1. Установите @rspack/core и @rspack/cli
  2. Переименуйте webpack.config.js в rspack.config.js
  3. Замените html-webpack-plugin на HtmlRspackPlugin
  4. Замените mini-css-extract-plugin на CssExtractRspackPlugin
  5. Проверьте совместимость кастомных плагинов в документации Rspack
  6. Запустите сборку и исправьте несовместимости

Типичное ускорение: 70-80% сокращение времени сборки при минимальных изменениях в конфигурации.

С Vite 7 на Vite 8

# Обновление зависимости
npm install vite@^8.0.0-beta

# Или через промежуточный пакет
npm install rolldown-vite

Большинство проектов мигрируют без изменений в конфигурации. Возможные проблемы:

  • Кастомные Rollup-плагины, использующие внутренние API
  • Специфичная конфигурация build.rollupOptions, несовместимая с Rolldown
  • Плагины, зависящие от esbuild-специфичного поведения

С webpack/Rollup на Vite

Для проектов, где полная миграция оправдана, Vite предоставляет шаблоны для всех популярных фреймворков. Основные шаги:

  1. Создайте vite.config.ts на основе шаблона
  2. Перенесите алиасы путей из tsconfig.json (Vite 8 поддерживает их нативно)
  3. Замените webpack-лоадеры на Vite-плагины
  4. Адаптируйте import статических ассетов (Vite использует ?url, ?raw суффиксы)
  5. Настройте прокси и переменные окружения (.env файлы вместо DefinePlugin)

Будущее: что ждать в 2026-2027

Vite готовится к стабильному релизу версии 8 с Rolldown. Дорожная карта VoidZero включает улучшение persistent cache, расширение поддержки Module Federation и оптимизацию Full Bundle Mode. Планируется интеграция с oxlint (линтер на Rust от Oxc) для создания полного end-to-end тулчейна.

Rspack 2.0 будет включать breaking changes при сохранении совместимости с webpack API. Планируется улучшение persistent cache с поддержкой cloud caching для монорепозиториев и CI-систем. Команда также работает над более тесной интеграцией с React Server Components.

esbuild продолжит эволюцию как стабильный низкоуровневый инструмент. Его роль всё больше смещается к использованию в качестве транспилятора и компонента в других системах. С появлением Rolldown как замены в Vite, прямое использование esbuild как основного бандлера будет сокращаться.

Заключение

В 2026 году выбор JavaScript-сборщика определяется контекстом проекта, а не абстрактным «лучший инструмент».

Vite 8 с Rolldown — оптимальный выбор для большинства новых проектов. Он сочетает скорость Rust-бандлера с богатой экосистемой, отличным developer experience и поддержкой всех популярных фреймворков. Переход на единый пайплайн Rolldown устраняет историческую проблему расхождения dev/prod поведения.

Rspack — лучший путь для команд с существующими webpack-проектами. Миграция занимает часы, а не недели, и даёт немедленное ускорение в 5-10 раз. Для микрофронтенд-архитектур с Module Federation Rspack остаётся сильнейшим кандидатом.

esbuild занимает нишу сборки библиотек и использования в качестве быстрого транспилятора. Для полноценных приложений его минималистичный подход требует значительных усилий по настройке того, что Vite и Rspack предоставляют из коробки.

Все три инструмента объединяет одна тенденция: нативные языки (Rust, Go) стали стандартом для JavaScript-тулинга. Эпоха сборщиков на JavaScript завершается, и это хорошая новость для разработчиков — сборка наконец перестаёт быть узким местом рабочего процесса.

Похожие статьи

Источники

  1. Vite 8 Beta: The Rolldown-powered Vite — официальный блог Vite
  2. Rspack 1.7: Final 1.x Update before 2.0 Transition — InfoQ
  3. esbuild — официальный сайт
  4. Build Tools Performance Benchmarks — GitHub
  5. Testing out Vite 8: Vite 8 is 5x faster — Peterbe.com
  6. Announcing Rolldown-Vite — VoidZero
  7. Migrate from webpack — Rspack Documentation
  8. Goodbye Webpack, Hello Rspack (and 80% Faster Builds) — Mews Developers
← Все статьи