В основе рабочего процесса в Vite лежат три ключевые команды:
npm run dev
npm run build
npm run preview
Каждая команда запускает совершенно разный режим работы проекта. Несмотря на внешнюю простоту, между ними существуют фундаментальные различия в механизме обработки модулей, скорости запуска, оптимизации кода и назначении.
devКоманда dev запускает сервер разработки.
npm run dev
Обычно внутри package.json находится следующий
скрипт:
{
"scripts": {
"dev": "vite"
}
}
После запуска Vite поднимает локальный HTTP-сервер:
VITE v5.0.0 ready in 320 ms
➜ Local: http://localhost:5173/
Главная особенность Vite — отсутствие полной сборки проекта при старте dev-сервера.
Классические сборщики вроде Webpack перед запуском собирают весь проект целиком:
При большом проекте это может занимать десятки секунд.
Vite использует другой подход:
Пример:
import { sum } from './utils/math.js';
console.log(sum(5, 2));
В dev-режиме браузер самостоятельно делает запрос:
GET /src/utils/math.js
Vite лишь:
Полный bundle при этом не создается.
Одной из важнейших возможностей режима dev является HMR
(Hot Module Replacement).
При изменении файла:
export const title = 'New title';
Vite:
Обычный live reload:
Недостатки:
HMR обновляет только изменившийся модуль.
Например:
При этом:
Во время запуска dev Vite выполняет pre-bundling
зависимостей через esbuild.
Например:
import lodash from 'lodash';
Пакеты из node_modules:
Причины этого механизма:
Некоторые библиотеки содержат сотни файлов.
Без оптимизации браузер сделал бы огромное количество запросов.
Многие npm-пакеты написаны в CommonJS:
module.exports = {}
Vite преобразует их в ESM.
devВо время разработки отсутствуют:
Главная цель режима — скорость запуска и обновления.
Dev-сервер генерирует удобные sourcemaps.
Это позволяет:
Даже очень большие проекты запускаются быстро, потому что:
buildКоманда build создает production-сборку приложения.
npm run build
Стандартный скрипт:
{
"scripts": {
"build": "vite build"
}
}
Результатом работы обычно становится директория:
dist/
В отличие от dev-режима, здесь выполняется полноценная сборка проекта.
Vite использует:
Vite строит полный dependency graph.
Пример:
main.js
├── app.js
├── router.js
└── api.js
Все зависимости анализируются рекурсивно.
Файлы объединяются в оптимизированные чанки.
Например:
dist/assets/index-a1b2c3.js
dist/assets/vendor-x8y9z0.js
Неиспользуемый код удаляется.
Пример:
export function used() {}
export function unused() {}
Если импортируется только:
import { used } from './utils.js';
Функция unused не попадет в production bundle.
Production-сборка минимизирует код.
Исходный файл:
function calculateTotal(price, tax) {
return price + tax;
}
После минификации:
function c(t,n){return t+n}
Это уменьшает размер bundle.
Во время build:
Vite обрабатывает:
Маленькие файлы могут быть встроены в bundle как base64.
Production-сборка добавляет hash к именам файлов:
index-7f3d2a.js
style-a8c91f.css
Это необходимо для корректного кеширования браузером.
При изменении содержимого:
Vite автоматически разбивает код на чанки.
Пример динамического импорта:
const module = await import('./admin.js');
Результат:
admin.js попадает в отдельный chunk;Production build ориентирован на:
dist/
├── assets/
│ ├── index-a1b2.js
│ ├── vendor-f8c1.js
│ └── style-92d1.css
├── index.html
previewКоманда preview запускает локальный сервер для просмотра
production-сборки.
npm run preview
Скрипт:
{
"scripts": {
"preview": "vite preview"
}
}
Команда НЕ выполняет сборку.
Она:
dist;preview работает только после build.
Правильный порядок:
npm run build
npm run preview
Если папка dist отсутствует, preview не сможет
запуститься.
Dev-режим и production могут вести себя по-разному.
Например:
Preview позволяет проверить именно production-результат.
Некоторые SPA работают корректно в dev, но ломаются после build.
Например:
/settings/profile
Preview помогает выявить:
В preview можно анализировать:
devРежим разработки:
previewРежим просмотра production build:
| Команда | Назначение | Основная цель |
|---|---|---|
vite |
Dev-сервер | Разработка |
vite build |
Production build | Оптимизация и сборка |
vite preview |
Локальный preview | Проверка production |
devЗапускается очень быстро:
ready in 250ms
Причина:
buildМожет выполняться значительно дольше:
build completed in 8.4s
Причина:
previewСтартует быстро, потому что:
Модули существуют отдельно:
main.js
utils.js
api.js
Браузер загружает их независимо.
Файлы объединяются:
index-a82d.js
vendor-c91f.js
Максимально подробные.
Подходят для отладки.
Могут:
Во время dev:
VITE_API_URL=http://localhost:3000
Часто используются локальные API.
Во время build:
VITE_API_URL=https://api.production.com
Формируется production-конфигурация.
.env файловVite поддерживает:
.env
.env.local
.env.development
.env.production
Во время dev:
.env.development
Во время build:
.env.production
npm run dev
npm run build
npm run preview
Dev-сервер не предназначен для production:
vite preview предназначен только для локальной
проверки.
Он не является полноценным production-сервером.
Для реального деплоя обычно используются:
Попытка запускать production через:
npm run dev
вместо:
npm run build
npm run preview
Из-за этого:
| Возможность | dev | build | preview |
|---|---|---|---|
| HMR | Да | Нет | Нет |
| Минификация | Нет | Да | Уже готова |
| Bundle | Нет | Да | Использует готовый |
| Tree shaking | Нет | Да | Уже применен |
| Production optimization | Нет | Да | Да |
| Быстрый запуск | Да | Нет | Да |
| Подходит для разработки | Да | Нет | Нет |
| Проверка production | Нет | Частично | Да |