Створення проєкту:
npm create vite@latest my-app -- --template react-ts
Шаблон містить vite.config.ts з плагіном @vitejs/plugin-react, tsconfig для коду застосунку й окремо для конфігурації, ESLint з eslint-plugin-react-hooks.
Що робить @vitejs/plugin-react:
- перетворює JSX (автоматичний runtime - імпорт
Reactу файлах не потрібен); - Fast Refresh - зміна компонента оновлює лише його, зі збереженням стану. Працює, якщо файл експортує лише компоненти: експорт констант чи функцій поряд з компонентом змушує перезавантажувати модуль повністю;
- у Vite 8 перетворення робить швидкий компілятор на Rust (Oxc), Babel за замовчуванням не потрібен.
React Compiler у поточній версії плагіна підключається двома способами:
// 1. через Babel - стабільний варіант
import react, { reactCompilerPreset } from '@vitejs/plugin-react';
import babel from '@rolldown/plugin-babel';
export default defineConfig({
plugins: [react(), babel({ presets: [reactCompilerPreset()] })],
});
// 2. нативний порт на Rust - експериментальний
export default defineConfig({
plugins: [react({ compiler: true })],
});
Компілятор 1.0 стабільний, працює з React 17+ і додає мемоізацію на етапі збирання. Для поступового впровадження - compilationMode: 'annotation' (компілюються лише функції з директивою "use memo").
TypeScript важливо розуміти правильно:
- Vite не перевіряє типи - він лише видаляє їх під час перетворення. Збирання пройде навіть з помилками типів;
- перевірка - окремим кроком:
tsc -bу скриптіbuild(так у шаблоні) і в CI, а під час розробки - редактор чиvite-plugin-checker; "jsx": "react-jsx","moduleResolution": "bundler","strict": true,"noUncheckedIndexedAccess"- корисні налаштування для нового проєкту;"isolatedModules": trueпотрібен, бо кожен файл перетворюється окремо:export typeдля реекспорту типів.
Змінні оточення - лише з префіксом VITE_, через import.meta.env; типи - в vite-env.d.ts.
ESLint з eslint-plugin-react-hooks (конфігурація recommended) у версії 7 містить і правила хуків, і правила React Compiler - порушення, через які компілятор пропустив би компонент, видно ще в редакторі.
З Laravel - laravel-vite-plugin поряд з плагіном React, сторінки через Inertia; стартовий набір Laravel React вже містить це налаштування.