Dev-сервер в Vite предназначен для локальной разработки приложения без полной пересборки проекта после каждого изменения файлов. Вместо традиционного подхода, при котором сборщик заранее обрабатывает весь проект, Vite использует нативные ES-модули браузера и отдаёт исходные файлы по запросу.
При запуске dev-сервера создаётся локальное окружение разработки со следующими возможностями:
.env-переменных;Главная особенность Vite заключается в том, что во время разработки код практически не бандлится. Браузер получает отдельные модули напрямую, а Vite выполняет только необходимую трансформацию файлов.
После создания проекта структура обычно содержит следующие основные файлы:
project/
├── index.html
├── package.json
├── vite.config.js
├── src/
│ ├── main.js
│ └── style.css
└── node_modules/
Перед запуском dev-сервера устанавливаются зависимости:
npm install
После установки появляется каталог node_modules,
содержащий локальные пакеты проекта.
Основные команды Vite обычно находятся в разделе
scripts.
Пример:
{
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
}
}
Каждый скрипт отвечает за отдельный режим работы:
| Скрипт | Назначение |
|---|---|
npm run dev |
запуск dev-сервера |
npm run build |
production-сборка |
npm run preview |
локальный просмотр production-сборки |
Стандартный запуск выполняется командой:
npm run dev
После запуска Vite выводит информацию в терминал:
VITE v5.0.0 ready in 320 ms
➜ Local: http://localhost:5173/
➜ Network: use --host to expose
Основные элементы вывода:
| Элемент | Описание |
|---|---|
Local |
локальный адрес проекта |
Network |
доступ из локальной сети |
ready in |
время старта сервера |
По умолчанию Vite использует порт 5173.
При открытии страницы браузер сначала получает
index.html.
Внутри HTML подключается главный модуль:
<script type="module" src="/src/main.js"></script>
Браузер самостоятельно загружает ES-модули:
import './style.css'
import { createApp } from './app.js'
Vite перехватывает запросы браузера и при необходимости:
Hot Module Replacement — одна из ключевых возможностей Vite.
При изменении файла:
Пример:
if (import.meta.hot) {
import.meta.hot.accept(() => {
console.log('Модуль обновлён')
})
}
HMR особенно полезен при работе:
Vite умеет обновлять стили мгновенно.
Изменение файла:
body {
background: black;
}
применяется в браузере практически моментально без обновления страницы.
Это достигается за счёт динамической замены
<style>-блоков внутри документа.
Во время первого запуска Vite выполняет pre-bundling зависимостей.
Для этого используется:
Например:
import lodash from 'lodash'
Пакет будет заранее оптимизирован и помещён в кеш:
node_modules/.vite
Это значительно ускоряет повторные запуски проекта.
Порт можно изменить несколькими способами.
npm run dev -- --port 3000
import { defineConfig } from 'vite'
export default defineConfig({
server: {
port: 3000
}
})
Vite поддерживает автоматическое открытие страницы после запуска сервера.
export default defineConfig({
server: {
open: true
}
})
После запуска браузер автоматически откроет адрес проекта.
По умолчанию сервер доступен только локально.
Для доступа с других устройств используется:
npm run dev -- --host
или:
export default defineConfig({
server: {
host: true
}
})
После этого приложение можно открыть с телефона, планшета или другого компьютера внутри сети.
Vite поддерживает локальный HTTPS.
Пример:
export default defineConfig({
server: {
https: true
}
})
В этом режиме браузер может показывать предупреждение о сертификате, поскольку используется локальный self-signed certificate.
Proxy используется для обхода CORS-проблем при обращении к backend API.
Пример:
export default defineConfig({
server: {
proxy: {
'/api': {
target: 'http://localhost:8000',
changeOrigin: true
}
}
}
})
Запрос:
fetch('/api/users')
будет автоматически перенаправлен на:
http://localhost:8000/api/users
Vite использует .env-файлы.
Пример:
VITE_API_URL=https://example.com
Доступ внутри приложения:
console.log(import.meta.env.VITE_API_URL)
Особенности:
VITE_;Vite поддерживает разные конфигурации окружения:
| Mode | Назначение |
|---|---|
| development | разработка |
| production | production-сборка |
| staging | промежуточное окружение |
Пример запуска:
vite --mode staging
Файлы окружения:
.env
.env.development
.env.production
.env.staging
Production-сборка создаётся командой:
npm run build
Во время сборки Vite:
Пример вывода:
dist/index.html
dist/assets/index-3f2d1a.js
dist/assets/index-8c4a12.css
Результат сборки помещается в папку:
dist/
Типичная структура:
dist/
├── index.html
├── assets/
│ ├── index-82a1d.js
│ ├── vendor-a21fd.js
│ └── style-12bcf.css
Содержимое dist готово к публикации на сервере.
Хотя dev-сервер Vite работает без традиционного bundling, production-режим использует Rollup.
Rollup отвечает за:
Tree shaking удаляет неиспользуемый код.
Пример:
export function used() {}
export function unused() {}
Если импортируется только:
import { used } from './utils.js'
то unused() не попадёт в production bundle.
Vite автоматически разбивает приложение на чанки.
Пример динамического импорта:
const module = await import('./admin.js')
В результате создаётся отдельный JS-файл, который загружается только при необходимости.
Это уменьшает размер первоначальной загрузки приложения.
Во время production-сборки выполняется:
Пример:
function sum(a, b) {
return a + b
}
после минимизации:
function n(n,r){return n+r}
Vite добавляет хеши к именам файлов:
index-a8f31c.js
Это необходимо для:
После сборки используется команда:
npm run preview
Vite запускает локальный сервер, обслуживающий содержимое
dist.
Это позволяет проверить production-версию приложения перед публикацией.
| Характеристика | Dev | Production |
|---|---|---|
| Скорость запуска | очень высокая | не важна |
| Bundling | отсутствует | полный |
| Минификация | нет | есть |
| HMR | есть | нет |
| Оптимизация | минимальная | максимальная |
| Source maps | подробные | сокращённые |
Во время разработки source maps помогают сопоставлять итоговый код с исходными файлами.
В production source maps могут отключаться:
export default defineConfig({
build: {
sourcemap: false
}
})
или включаться:
export default defineConfig({
build: {
sourcemap: true
}
})
Каталог сборки можно изменить:
export default defineConfig({
build: {
outDir: 'build'
}
})
После этого сборка будет создаваться в папке:
build/
Перед новой сборкой Vite автоматически очищает каталог
dist.
Поведение можно изменить:
export default defineConfig({
build: {
emptyOutDir: false
}
})
Manifest используется backend-приложениями для поиска итоговых ассетов.
export default defineConfig({
build: {
manifest: true
}
})
После сборки создаётся:
dist/.vite/manifest.json
Этот механизм особенно важен при интеграции Vite:
Для анализа bundle часто подключаются плагины:
Пример установки:
npm install --save-dev rollup-plugin-visualizer
Подключение:
import { visualizer } from 'rollup-plugin-visualizer'
export default defineConfig({
plugins: [
visualizer()
]
})
После сборки формируется HTML-отчёт со структурой bundle.
Полный цикл работы с Vite обычно выглядит следующим образом:
dist на сервере.Ошибка:
Port 5173 is already in use
Решение:
npm run dev -- --port 3001
Причины:
Иногда помогает удаление кеша:
node_modules/.vite
Некоторые старые библиотеки плохо работают с ESM.
Решение:
export default defineConfig({
optimizeDeps: {
include: ['legacy-library']
}
})
Неправильная настройка base приводит к ошибкам загрузки
ассетов.
Пример:
export default defineConfig({
base: '/app/'
})
Настройка особенно важна при размещении проекта не в корне домена.