Vite представляет собой современный инструмент сборки фронтенд-приложений, ориентированный на скорость разработки и минимизацию времени холодного старта. Его ключевая особенность заключается в отказе от традиционного бандлинга на этапе разработки: исходные модули подаются в браузер как ES-модули, а сборка выполняется только для production.
Основные принципы архитектуры:
Такой подход устраняет необходимость пересборки всего проекта при каждом изменении, что особенно критично для крупных приложений.
Vite dev-сервер работает поверх нативных ES Modules. Каждый импорт рассматривается как отдельный HTTP-запрос, который сервер перехватывает и трансформирует при необходимости.
Механизм работы:
Это принципиально отличается от webpack-подхода, где строится единый граф и создаётся один или несколько бандлов.
Vite поддерживает трансформации:
Трансформация выполняется через быстрые инструменты (в первую очередь esbuild), что снижает задержки до минимума.
Одна из ключевых оптимизаций Vite — предварительное бандлирование зависимостей.
Причины:
Решение:
Преимущества:
HMR в Vite реализован через точечное обновление модулей без перезагрузки страницы.
Механика:
Особенности:
HMR интегрирован на уровне модульной системы, а не сборки, что делает его более точным и быстрым.
Основной конфигурационный файл — vite.config.js или
vite.config.ts.
Пример базовой конфигурации:
import { defineConfig } from 'vite'
export default defineConfig({
server: {
port: 3000,
open: true
},
build: {
outDir: 'dist',
sourcemap: true
}
})
server
build
resolve
resolve: {
alias: {
'@': '/src'
}
}
Vite использует плагинную систему, совместимую с Rollup, но расширенную под dev-сервер.
Плагин может:
Пример простого плагина:
export default function myPlugin() {
return {
name: 'my-plugin',
transform(code, id) {
if (id.endsWith('.js')) {
return code.replace(/console.log/g, '')
}
}
}
}
Для production Vite использует Rollup как базовый bundler.
Процесс сборки:
Особенности:
Vite активно использует динамические импорты:
const module = await import('./module.js')
Это приводит к:
Vite рассматривает CSS как часть графа модулей.
Поддерживается:
Пример CSS Modules:
.title {
color: blue;
}
import styles from './style.module.css'
element.className = styles.title
Ассеты обрабатываются как модули:
Пример:
import logo from './logo.png'
Vite возвращает URL к оптимизированному ресурсу.
Vite использует .env файлы.
Правила:
VITE_import.meta.envПример:
VITE_API_URL=https://api.example.com
Использование:
const url = import.meta.env.VITE_API_URL
Vite поддерживает SSR через отдельный режим.
Особенности:
Основные сценарии:
Vite достигает высокой скорости за счёт комбинации технологий:
Ключевая метрика — время запуска dev-сервера, которое не зависит от размера проекта.
project/
src/
main.js
components/
public/
vite.config.js
index.html
Особенность Vite — index.html является частью графа
сборки и точкой входа.