Интеграция React в Vite основана на концепции плагинов Rollup-совместимой системы. В основе лежит официальный плагин @vitejs/plugin-react, который обеспечивает трансформацию JSX, поддержку Fast Refresh и корректную работу React в dev- и production-сборках.
Vite сам по себе не навязывает фреймворк. Он предоставляет минимальный runtime для разработки и делегирует фреймворк-специфичные преобразования плагинам. В случае React именно этот плагин отвечает за:
Таким образом, React в Vite — это не встроенная функция, а подключаемый слой компиляции и оптимизации.
Основной способ подключения React в Vite-проекте — установка официального плагина и добавление его в конфигурацию Vite.
В типичном проекте используются две зависимости:
Плагин подключается в конфигурации vite.config.js или
vite.config.ts:
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
export default defineConfig({
plugins: [react()]
})
После этого Vite автоматически начинает обрабатывать файлы
.jsx и .tsx, применяя нужные
трансформации.
Плагин React для Vite поддерживает два основных режима трансформации JSX:
По умолчанию используется Babel, который обеспечивает:
Babel используется внутри плагина через внутреннюю конфигурацию, без
необходимости вручную создавать .babelrc.
Современная альтернатива — использование SWC, включаемое через опцию:
react({
babel: {
plugins: []
},
jsxRuntime: 'automatic'
})
В новых версиях Vite возможно переключение на SWC-подход для ускорения трансформации. SWC обеспечивает:
React поддерживает два режима JSX runtime:
Требует явного импорта React в каждом файле:
import React from 'react'
JSX компилируется в вызовы React.createElement.
Современный режим, включающийся в Vite React plugin по умолчанию:
react({
jsxRuntime: 'automatic'
})
В этом режиме:
Одной из ключевых особенностей интеграции React и Vite является Fast Refresh, реализованный через React Fast Refresh.
Fast Refresh позволяет обновлять компоненты без полной перезагрузки страницы и без потери состояния (в большинстве случаев).
Fast Refresh основан на следующих этапах:
Состояние сохраняется, если:
Если изменения затрагивают структуру хуков, состояние сбрасывается для предотвращения неконсистентности.
Vite реализует собственную систему HMR поверх ESM. Плагин React интегрируется в этот процесс через трансформационные хуки.
Основные этапы:
Важно, что Vite не использует Webpack-стиль бандлинга в dev-режиме, что делает обновления практически мгновенными.
Плагин предоставляет расширенную настройку поведения:
react({
babel: {
plugins: [
['@babel/plugin-proposal-decorators', { legacy: true }]
]
}
})
Используется для добавления кастомных трансформаций JSX или JavaScript.
react({
fastRefresh: true
})
В современных версиях включено по умолчанию, но может быть отключено для специфичных сборок.
Поддержка кастомного runtime:
react({
jsxImportSource: '@emotion/react'
})
Используется при работе с CSS-in-JS библиотеками, заменяющими стандартный JSX runtime.
Vite автоматически поддерживает TSX-файлы при использовании React плагина.
Особенности:
@types/reactКлючевое отличие от классических сборщиков — отсутствие отдельного TypeScript compilation step в dev-режиме.
В production режиме Vite использует Rollup. Плагин React выполняет следующие задачи:
Благодаря этому итоговый бандл минимизируется без дополнительной настройки.
Плагин корректно работает с большинством популярных библиотек:
Особенно важна совместимость с библиотеками, зависящими от HMR, так как Fast Refresh требует корректной идентификации модулей.
В monorepo-проектах плагин React в Vite корректно работает с внешними
пакетами при условии правильной настройки optimizeDeps.
При использовании SSR плагин участвует только в клиентской части. Серверная сборка требует отдельной конфигурации Vite SSR API, где React plugin остаётся трансформационным слоем.
При сборке React-библиотек плагин обеспечивает корректную компиляцию JSX в зависимости от выбранного runtime.
Плагин реализует ряд низкоуровневых оптимизаций:
Эти механизмы позволяют значительно ускорить dev-сервер даже в крупных React-приложениях.
Несмотря на высокую скорость работы, существуют особенности:
Эти ограничения связаны не с Vite напрямую, а с моделью React runtime и HMR.