Вышел Vite 8 — самое крупное изменение архитектуры с версии 2. Главное: под капотом теперь работает единственный бандлер Rolldown, написанный на Rust. Раньше их было два — esbuild для разработки и Rollup для финальной сборки. Теперь один инструмент делает всё.
Зачем меняли?
Два бандлера — это два набора правил, два плагинных API и куча «склеивающего» кода между ними. Со временем накапливались мелкие расхождения: одно и то же преобразование могло давать чуть разные результаты в dev-режиме и в продакшн-сборке.
Rolldown поддерживает тот же плагинный API, что и Rollup, поэтому большинство существующих плагинов работают без изменений.
Насколько быстро?
В бенчмарках Rolldown показывает 10–30x ускорение по сравнению с Rollup, достигая скорости esbuild. Реальные цифры от компаний, которые тестировали превью:
- Linear — с 46 сек до 6 сек (−87%)
- Beehiiv — −64%
- Ramp — −57%
- Mercedes-Benz.io — −38%
Чем больше проект — тем заметнее эффект.
Что ещё нового
Встроенная поддержка paths из tsconfig
Раньше алиасы приходилось дублировать в конфиге Vite. Теперь можно включить автоматическую подхватку из tsconfig.json одной строчкой:
// vite.config.ts
export default defineConfig({
resolve: {
tsconfigPaths: true, // читает paths из tsconfig.json
},
})
Если в tsconfig.json написано:
{
"compilerOptions": {
"paths": {
"@/*": ["./src/*"]
}
}
}
...то импорты вида import Button from '@/components/Button' заработают без дополнительной настройки. По умолчанию опция выключена — есть небольшой оверхед на производительность.
Пробрасывание консоли браузера в терминал
Ошибки из console.error в браузере теперь видны прямо в CLI. Полезно при работе с AI-агентами и автоматизации. Если Vite определяет, что запущен внутри coding-агента — активируется автоматически.
// vite.config.ts
export default defineConfig({
server: {
forwardConsole: true,
},
})
Встроенные Devtools
Раньше ставились отдельным плагином, теперь включаются одной строчкой в конфиге:
// vite.config.ts
export default defineConfig({
devtools: true,
})
emitDecoratorMetadata без плагинов
Нужно для некоторых фреймворков вроде NestJS или TypeORM. Раньше требовал сторонний Babel-плагин. Теперь Vite 8 поддерживает это из коробки — достаточно включить опции в tsconfig.json:
{
"compilerOptions": {
"experimentalDecorators": true,
"emitDecoratorMetadata": true
}
}
WebAssembly в SSR
Импорты .wasm?init теперь работают и на сервере — не только в браузере.
Как обновиться
Для большинства проектов — просто обновить версию. Vite 8 умеет автоматически конвертировать старые настройки esbuild и rollupOptions в эквиваленты для Rolldown.
npm install vite@8 --save-dev
Для больших и сложных проектов рекомендуют двухшаговый путь: сначала переключиться с vite на rolldown-vite в рамках Vite 7, убедиться что всё работает, и только потом ставить восьмёрку. Так проще понять, какие проблемы от смены бандлера, а какие от других изменений в версии.
Важно: размер пакета вырос
Vite 8 весит примерно на 15 МБ больше Vite 7: ~10 МБ — это lightningcss, который теперь идёт в комплекте вместо опционального peer dependency, ~5 МБ — бинарник Rolldown. Команда обещает работать над оптимизацией.
Требования к Node.js
Те же, что в Vite 7: Node.js 20.19+ или 22.12+. Эти версии поддерживают require(esm) без флагов, что позволяет Vite распространяться только как ESM-пакет.