Система плагинов — одна из ключевых частей Vite. Большинство возможностей экосистемы реализуется именно через плагины: поддержка фреймворков, оптимизация изображений, работа с SVG, генерация PWA-приложений, проверка типов, линтинг, SSR, интеграция Markdown и многое другое.
Vite использует совместимую с Rollup архитектуру плагинов, поэтому многие Rollup-плагины работают без изменений. При этом Vite добавляет собственные хуки, ориентированные на dev server, HMR и оптимизированную разработку.
Подключение большинства плагинов происходит через массив
plugins в конфигурации vite.config.js:
import { defineConfig } from 'vite'
export default defineConfig({
plugins: []
})
@vitejs/plugin-vueПлагин обеспечивает поддержку Vue Single File Components
(.vue), HMR, компиляцию шаблонов, поддержку
<script setup> и другие возможности Vue.
npm install vue @vitejs/plugin-vue
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
export default defineConfig({
plugins: [vue()]
})
<template>
<h1>{{ title }}</h1>
</template>
<script setup>
const title = 'Vite + Vue'
</script>
<style scoped>
h1 {
color: red;
}
</style>
При изменении .vue файла обновляется только изменённый
компонент, без полной перезагрузки страницы.
<script setup lang="ts">
interface User {
name: string
}
const user: User = {
name: 'Alex'
}
</script>
@vitejs/plugin-reactДобавляет поддержку React, JSX, Fast Refresh и трансформацию через Babel.
npm install react react-dom @vitejs/plugin-react
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
export default defineConfig({
plugins: [react()]
})
Fast Refresh обновляет React-компоненты без потери состояния.
function Counter() {
const [count, setCount] = useState(0)
return (
<button onCl ick={() => setCount(count + 1)}>
{count}
</button>
)
}
После изменения JSX состояние компонента сохраняется.
react({
babel: {
plugins: ['babel-plugin-styled-components']
}
})
@vitejs/plugin-react-swcАльтернатива стандартному React-плагину, использующая SWC вместо Babel.
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react-swc'
export default defineConfig({
plugins: [react()]
})
Некоторые Babel-плагины несовместимы с SWC. При использовании сложной Babel-экосистемы предпочтительнее стандартный React plugin.
vite-plugin-checkerВыполняет проверку TypeScript, ESLint, Stylelint и других инструментов параллельно с dev server.
npm install vite-plugin-checker -D
import checker from 'vite-plugin-checker'
export default {
plugins: [
checker({
typescript: true
})
]
}
checker({
eslint: {
lintCommand: 'eslint "./src/**/*.{js,ts,vue}"'
}
})
checker({
stylelint: {
lintCommand: 'stylelint "./src/**/*.{css,scss}"'
}
})
vite-plugin-eslintИнтеграция ESLint непосредственно в Vite.
npm install vite-plugin-eslint eslint -D
import eslint from 'vite-plugin-eslint'
export default {
plugins: [
eslint()
]
}
При сохранении файлов запускается линтинг:
eslint({
include: ['src/**/*.js', 'src/**/*.vue']
})
vite-plugin-checkervite-plugin-eslint ориентирован исключительно на ESLint,
тогда как vite-plugin-checker поддерживает сразу несколько
инструментов.
vite-tsconfig-pathsДобавляет поддержку alias из tsconfig.json.
{
"compilerOptions": {
"paths": {
"@/*": ["src/*"]
}
}
}
TypeScript понимает alias, но Vite — нет.
npm install vite-tsconfig-paths -D
import tsconfigPaths from 'vite-tsconfig-paths'
export default {
plugins: [
tsconfigPaths()
]
}
import Button from '@/components/Button'
vite-plugin-svg-iconsСоздание SVG sprite из набора иконок.
npm install vite-plugin-svg-icons -D
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
import path from 'path'
export default {
plugins: [
createSvgIconsPlugin({
iconDirs: [
path.resolve(process.cwd(), 'src/icons')
],
symbolId: 'icon-[name]'
})
]
}
<svg>
<use href="#icon-user"></use>
</svg>
vite-svg-loaderПозволяет импортировать SVG как Vue-компоненты.
npm install vite-svg-loader -D
import svgLoader from 'vite-svg-loader'
export default {
plugins: [
svgLoader()
]
}
<script setup>
import LogoIcon from './logo.svg'
</script>
<template>
<LogoIcon />
</template>
vite-plugin-pagesАвтоматическая генерация маршрутов на основе файловой структуры.
src/pages/
├── index.vue
├── about.vue
└── users/
└── profile.vue
Автоматически создаются маршруты:
/
about
/users/profile
npm install vite-plugin-pages -D
import Pages from 'vite-plugin-pages'
export default {
plugins: [
Pages()
]
}
import { createRouter } from 'vue-router'
import routes from '~pages'
const router = createRouter({
history,
routes
})
unplugin-auto-importАвтоматический импорт API библиотек.
import { ref, computed } from 'vue'
Подобные импорты постоянно повторяются.
npm install unplugin-auto-import -D
import AutoImport from 'unplugin-auto-import/vite'
export default {
plugins: [
AutoImport({
imports: ['vue']
})
]
}
const count = ref(0)
Импорт создаётся автоматически.
AutoImport({
dts: true
})
Создаётся файл:
auto-imports.d.ts
unplugin-vue-componentsАвтоматическая регистрация Vue-компонентов.
npm install unplugin-vue-components -D
import Components from 'unplugin-vue-components/vite'
export default {
plugins: [
Components()
]
}
<template>
<BaseButton />
</template>
Без ручного импорта:
import BaseButton from './components/BaseButton.vue'
vite-plugin-pwaДобавляет поддержку Progressive Web App.
npm install vite-plugin-pwa -D
import { VitePWA } from 'vite-plugin-pwa'
export default {
plugins: [
VitePWA({
registerType: 'autoUpdate'
})
]
}
VitePWA({
manifest: {
name: 'My App',
short_name: 'App',
theme_color: '#ffffff'
}
})
vite-imagetoolsТрансформация изображений во время сборки.
import img from './image.png?w=400&format=webp'
npm install vite-imagetools -D
import { imagetools } from 'vite-imagetools'
export default {
plugins: [imagetools()]
}
vite-plugin-compressionСоздание gzip и brotli ресурсов во время build.
npm install vite-plugin-compression -D
import compression from 'vite-plugin-compression'
export default {
plugins: [
compression({
algorithm: 'gzip'
})
]
}
compression({
algorithm: 'brotliCompress'
})
rollup-plugin-visualizerАнализ размера bundle.
npm install rollup-plugin-visualizer -D
import { visualizer } from 'rollup-plugin-visualizer'
export default {
plugins: [
visualizer()
]
}
После сборки создаётся HTML-отчёт:
stats.html
Плагин показывает:
vite-plugin-inspectИнструмент отладки плагинов и трансформаций.
npm install vite-plugin-inspect -D
import Inspect from 'vite-plugin-inspect'
export default {
plugins: [
Inspect()
]
}
После запуска проекта:
/__inspect/
vite-plugin-mkcertАвтоматическая генерация локальных HTTPS сертификатов.
npm install vite-plugin-mkcert -D
import mkcert from 'vite-plugin-mkcert'
export default {
plugins: [
mkcert()
]
}
export default {
server: {
https: true
}
}
Полезно при разработке:
vite-plugin-static-copyКопирование статических файлов во время build.
npm install vite-plugin-static-copy -D
import { viteStaticCopy } from 'vite-plugin-static-copy'
export default {
plugins: [
viteStaticCopy({
targets: [
{
src: 'bin/*.wasm',
dest: 'wasm'
}
]
})
]
}
Особенно полезен для:
vite-plugin-top-level-awaitДобавляет поддержку top-level await для старых браузеров.
const data = await fetch('/api/data')
npm install vite-plugin-top-level-await -D
import topLevelAwait from 'vite-plugin-top-level-await'
export default {
plugins: [
topLevelAwait()
]
}
vite-plugin-htmlТрансформация HTML во время сборки.
npm install vite-plugin-html -D
import { createHtmlPlugin } from 'vite-plugin-html'
export default {
plugins: [
createHtmlPlugin({
inject: {
data: {
title: 'My Application'
}
}
})
]
}
<title><%= title %></title>
vite-plugin-mockСоздание mock API для frontend-разработки.
npm install vite-plugin-mock mockjs -D
import { viteMockServe } from 'vite-plugin-mock'
export default {
plugins: [
viteMockServe()
]
}
export default [
{
url: '/api/user',
method: 'get',
response: () => {
return {
id: 1,
name: 'Admin'
}
}
}
]
Некоторые старые Rollup-плагины могут работать некорректно из-за отсутствия поддержки dev server и HMR.
Не все плагины совместимы с server-side rendering.
Некоторые плагины существенно замедляют:
Особенно это касается сложных AST-трансформаций и линтинга.
Важно учитывать:
Порядок плагинов влияет на результат трансформации:
plugins: [
vue(),
AutoImport(),
Components()
]
Некоторые плагины должны выполняться раньше или позже других.
plugins: [
process.env.ANALYZE && visualizer()
].filter(Boolean)
export default defineConfig(({ command }) => {
return {
plugins: [
command === 'build' && compression()
].filter(Boolean)
}
})