Вышел Rolldown 1.0

• build

Вступление

Вчера вышел Rolldown 1.0. Уже долгое время была доступна бета, затем был Release Candidate (RC), и этот релиз-кандидат даже попал в стабильный релиз Vite 8.

Почему это важно для экосистемы фронтенда? Как это изменит сборку проектов? Что это вообще такое и какие задачи решает? Попробуем ответить на всё.

Webpack / Rollup

Webpack – уже далеко не новый инструмент, который в своё время поменял очень многое. Он позволял собрать код как для дев-режима, так и для продакшена, используя код, раскиданный по разным файлам.

Когда-то о таком можно было только мечтать. Наверно, многие не застали, но когда-то фронтендовый код собирался буквально склейкой строк, обёрнутый в (function(){})();. Были вариации на тему Require.js и подобного, но это уже не имеет такого глобального значения. Webpack это всё поменял, и в текущем мире старые подходы выглядят… нелепо?

Сейчас считается стандартом разложить код по файлам, связать их через ESM/CommonJS, а потом собрать всё это сборщиком в рабочий продакшеновый код. На всякий случай напомню, что require() в браузерах не работает, а нативные импорты import ... в браузерах хоть и есть, но в чистом виде приведут к большому количеству запросов, и, как следствие, к медленной загрузке страницы. Да, сборка проекта всё ещё нужна (или бандлинг, называйте, как хотите).

В 2018м году вышел Rollup 1.0. Оглядываясь назад, можно сказать, что все эти годы Rollup был хорошим инструментом. Он не победил Webpack по популярности в головах людей (как мне кажется), но он занял немалую нишу.

Скажу субъективно, но по сравнению с Webpack, Rollup представлял более простое апи (в том числе для плагинов), меньший размер выходных файлов и более простую (и понятную) стратегию деления на чанки. Он особенно хорошо себя показывал для сборки всевозможных библиотек, когда требовалось получить хороший выходной код, JS в чистом виде. А Webpack всё ещё хорошо себя показывал в сборке для браузеров со всевозможными плагинами для картинок, CSS и кучи всего другого (конечно, аналогичные плагины были и для Rollup).

Vite

Vite решал схожие задачи, но делал это проще и быстрее. Встроенная поддержка тайпскрипта (в том числе для конфига!) – пожалуйста. Поддержка CSS из коробки? Тоже. Минификация? Хорошая.

И всё это без установки десятка-другого пакетов из npm и без конфига на сотню строк. Vite брал самые распространённые практики и делал так, чтобы они легко заводились, а при необходимости поведение можно было кастомизировать.

Кроме того, он был (и есть) в разы быстрее Webpack. Переход на Vite сразу сказывался на опыте разработки – больше не нужно было ждать десятки секунд (а то и минуты) для старта дев-сервера.

За счёт чего это всё работало? Исторически, Vite использовал Esbuild и Rollup. Esbuild использовался в дев-сборке для рядовых задач, например, для превращения TypeScript в JavaScript. Rollup использовался в продакшеновой сборке и объединял файлы, делил на чанки и так далее.

Не буду останавливаться подробно на всех нюансах, но отмечу, что Vite пытался максимально обеспечить совместимость с плагинами Rollup. Часть плагинов Rollup заводилась из коробки и для дев-режима тоже, даже когда никакого Rollup и не использовалось!

Тем самым Vite пытался усидеть на двух стульях: в дев-сборке Esbuild + пофайловая сборка, а в проде Rollup и сборка бандлов.

Esbuild

Остановимся на Esbuild чуть подробнее. Esbuild решал схожие задачи: собрать код, минифицировать его, и так далее. Он написан на Go и пытался заменить целую пачку инструментов:

  • Terser (Uglify) не нужен, вот вам быстрая минификация
  • Webpack не нужен, вот вам быстрый бандлинг
  • tsc (ts-loader) тоже не нужен, Esbuild умеет справляться и с этим
  • Сборка CSS? Пожалуйста
  • И так далее

Он настолько хорош, что Vite его вобрал в себя. Всё из-за скорости.

В чём он был не хорош (опять же, субъективно):

  • Всё ещё не релизнута версия 1.0
  • Ограниченная кастомизация
  • Не очень качественная проработка нюансов

На последнем остановлюсь подробнее. С моей точки зрения, Esbuild хорош, но хорош в узком наборе задач, а пытался он решить очень широкий. Код минифицирует, но не так качественно, как, например, SWC. CSS собирает (и даже префиксы генерить умеет) – но собирает его, опять же, с упущениями. Собирать код под старые браузеры может – но в моменте могло оказаться, что “уйти в прошлое” он достаточно глубоко не может.

Вкупе с недостаточной кастомизированностью всё это ощущалось, как хороший инструмент, но который не позволял решить все задачи и который не решал задачу быстрого старта проекта для браузера. Хотя знатоки Esbuild меня тут поправят.

Vite на фоне Esbuild представляет собой более полное решение, с более богатым апи и настройками. По сути, он предлагает “коробочное” решение рядовых задач, в то время как Esbuild так и остался на вторых ролях.

Rolldown

Rolldown был призван решить проблемы подхода, который предложил Vite. У Vite были явные плюсы, но две системы сборки приводили к несовместимостям и разной работе кода, а комбайн из внутренних инструментов работал исключительно хорошо, но всё же обладал недостатками.

Rolldown решает ту же задачу, что и Rollup – собрать код. И делает это с куда большей скоростью, схожим апи и поддержкой плагинов Rollup.

Если раньше Vite не мог позволить использовать Rollup для полной сборки в дев-режиме из-за скорости, то с Rolldown это проблема решается. А если использовать один инструмент для разработки (дев) и продакшена – то и плагины будут работать и там и там.

И Rolldown создавался специально для Vite! Но может быть использован отдельно.

Помимо всего прочего, Rolldown нацелился на встройку возможностей из плагинов: TypeScript есть из коробки, JSX – тоже.

Очень важная особенность – поддержка CommonJS тоже есть из коробки. Интеграция разношёрстного кода должна стать проще.

Ещё один плюс для разработчиков, которые хотят всё точно настроить – возможность разбивать код на чанки а-ля Webpack. Кто-то может сказать, что в некоторых случаях настройка Webpack позволяла сделать больше, чем в Rollup, и теперь и это тоже внедрено в Rolldown.

Esbuild vs Rolldown

В чём же главное отличие от того, что у нас уже было в Esbuild?

По скорости как будто получается один порядок чисел и там и там.

А вот по гибкости и по возможности настройки Rolldown должен показать себя сильно лучше, чем Esbuild. Вместе с Vite будет то самое коробочное решение для большинства современных задач фронтенда.

Frontend 2026

Мне видится, что всё больше проектов будут стартовать с Vite и Rolldown, и это станет стандартом ближайшие годы. Если вы ещё не пробовали Vite – обязательно попробуйте (особенно, если вы привыкли к Webpack).

Если на вашем проекте уже Vite, но старой версии – запланируйте миграцию. Используйте гайды, чтобы предусмотреть все грабли.

Rolldown на практике

Я перевёл несколько своих несложных проектов на Vite 8 с Rolldown. В простых случаях это просто.

Однако один проект в моменте я обновить не смог, и дело оказалось в том самом код-сплиттинге, который был прокачан в Rolldown по сравнению с Rollup. Я просто не смог получить нужное мне разбиение на файлы, которое спокойно работало в старой версии. Буду пробовать на релизной версии Rolldown, возможно, это уже исправили.

Ещё одна точка, которая вызывает опасения – плагины. Заявлена поддержка JS плагинов, однако есть опасения, что на практике будет не всё так радужно. Время покажет.

По всей видимости, может пригодиться и навык отладки Rust (язык, на котором написан Rolldown). Раньше, если что-то не работало, можно было спокойно отладить понятный JS код. Сейчас так сделать уже не получится.

Итого

Rolldown 1.0 – знаковое событие в мире фронтенда. Спустя годы это может оказаться переломным моментом, в который большинство разработчиков перешло от одного инструмента к другому, а тренды поменялись.

Обязательно запланируйте время на то, что бы на него посмотреть, будь то отдельно или в составе Vite 8.

Это не значит, что все остальные инструменты отменяются, но это может здорово изменить в лучшую сторону ваши ежедневные задачи.

Обсудить в Telegram

Почитать ещё посты

  • Симуляция медленной сети для отдельных запросов
  • corner-shape и border-shape: что это и в чём разница?
  • Псевдоэлементы теперь настоящие
  • WebTransport всех победит?
  • Обзор TypeScript 6