Процесс сборки в Vite основан на использовании
Rollup как основного бандлера для production-сборки,
при этом сам Vite в режиме разработки использует нативные ES-модули
браузера и esbuild для трансформаций. Команда vite build
запускает финальную оптимизацию приложения, включая объединение модулей,
минификацию, разделение кода и подготовку статических ресурсов для
деплоя.
При выполнении сборки Vite формирует директорию dist,
которая становится готовым артефактом для размещения на любом
статическом или серверном хостинге.
Основные этапы сборки:
Поведение сборки управляется через секцию build в файле
vite.config.js.
export default {
build: {
outDir: 'dist',
assetsDir: 'assets',
sourcemap: false,
minify: 'esbuild'
}
}
outDir Директория, в которую будет помещён результат
сборки. По умолчанию dist.
assetsDir Поддиректория внутри outDir,
куда складываются ассеты.
sourcemap Включение source maps. Используется для отладки production-кода.
minify Определяет инструмент минификации:
esbuild — быстрый вариант (по умолчанию)terser — более гибкий и совместимыйfalse — отключение минификацииПри деплое на подкаталоги важно корректно задать базовый путь:
export default {
base: '/app/'
}
Этот параметр влияет на:
Для CDN или корневого деплоя используется:
base: '/'
Vite автоматически обрабатывает импортируемые ассеты:
import logo from './assets/logo.png'
В production-сборке:
assets/.Настройка лимита инлайна:
export default {
build: {
assetsInlineLimit: 4096
}
}
Файлы меньше указанного значения в байтах будут встроены в код.
Vite автоматически применяет code splitting через Rollup. Разделение происходит:
Пример динамического импорта:
const module = await import('./module.js')
Такой подход создаёт отдельный chunk, который загружается по требованию.
Дополнительно можно управлять чанками:
export default {
build: {
rollupOptions: {
output: {
manualChunks(id) {
if (id.includes('node_modules')) {
return 'vendor'
}
}
}
}
}
}
Vite выполняет несколько уровней оптимизации:
Используется esbuild или terser:
Vite поддерживает переменные окружения через .env
файлы:
.env.env.production.env.localДоступ в коде:
console.log(import.meta.env.VITE_API_URL)
Важно:
VITE_;После выполнения vite build можно запустить локальный
сервер для проверки результата:
vite preview
Это позволяет:
Сервер preview не предназначен для production-использования, но точно имитирует поведение статического хостинга.
Результат сборки Vite — это набор статических файлов. Деплой сводится
к загрузке содержимого dist на сервер.
Типичная конфигурация:
server {
listen 80;
server_name example.com;
root /var/www/app/dist;
location / {
try_files $uri $uri/ /index.html;
}
}
Ключевой момент — поддержка SPA-роутинга через
try_files.
При использовании GitHub Pages важно задать base:
base: '/repo-name/'
Сборка:
vite build
Далее содержимое dist публикуется в ветку
gh-pages.
Для серверов без ручной конфигурации достаточно:
vite builddistДополнительно:
Netlify SPA fallback
Файл _redirects:
/* /index.html 200
Многоступенчатая сборка:
FROM node:20 AS build
WORKDIR /app
COPY . .
RUN npm install
RUN npm run build
FROM nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html
Подход позволяет:
Ключевые методы уменьшения размера сборки:
rollup-plugin-visualizer;При необходимости поддержки старых браузеров используется плагин:
import legacy from '@vitejs/plugin-legacy'
export default {
plugins: [
legacy({
targets: ['defaults', 'not IE 11']
})
]
}
Плагин создаёт дополнительный bundle с транспиляцией.
Перед сборкой обычно учитываются:
Vite не выполняет строгую типизацию на этапе build, поэтому ответственность за это лежит на инструментальной цепочке (TypeScript, ESLint, CI).
Vite позволяет расширять процесс сборки через Rollup:
export default {
build: {
rollupOptions: {
external: ['some-lib'],
output: {
globals: {
'some-lib': 'SomeLib'
}
}
}
}
}
Это используется при:
Vite может использоваться не только для приложений, но и для библиотек:
export default {
build: {
lib: {
entry: 'src/index.js',
name: 'MyLib',
fileName: 'my-lib'
}
}
}
Результат:
Vite добавляет content hash к именам файлов:
app.3f2a1c.js
style.91bc22.css
Это обеспечивает:
Типичная структура:
dist/
assets/
index.3f2a1c.js
vendor.8ac91d.js
index.91bc22.css
index.html
index.html содержит ссылки на хешированные ресурсы, что
делает сборку полностью автономной.