Vite: production-ориентированный vite.config.ts (2026)
Минимальный и достаточный конфиг Vite для современного фронтенд-проекта: ESM, TypeScript, defineConfig, алиасы, build.target, sourcemap, порты dev и preview. Только официальный API, без экспериментальных опций.
Как использовать
- Скопировать в корень проекта как vite.config.ts. Установить vite и typescript: npm i -D vite typescript.
- При необходимости добавить плагин фреймворка (React: @vitejs/plugin-react, Vue, Svelte) и расширить конфиг.
- Сборка: pnpm build. Проверка статики: pnpm preview. Все опции — из официальной документации Vite.
Нужен минимальный и достаточный конфиг Vite для продакшн-сборки: ESM, TypeScript, алиасы, целевой браузер, sourcemap и порты dev/preview. Проблема: лишние или устаревшие опции, нестабильный API; размытая цель сборки и лишние sourcemap в проде. Симптомы: сборка под старые браузеры без необходимости, тяжёлые .map в бандле, неудобные импорты без алиасов. Ниже — конфиг на официальном API (vite.dev/config): resolve.alias, build.target, sourcemap, порты; когда достаточно такого конфига, когда расширять; проверка сборки и preview.
Решение
Конфиг использует только официальный API Vite, без экспериментальных опций.
import path from 'node:path';
import { fileURLToPath } from 'node:url';
import { defineConfig } from 'vite';
const __dirname = path.dirname(fileURLToPath(import.meta.url));
export default defineConfig({
resolve: {
alias: {
'@': path.resolve(__dirname, 'src'),
},
},
server: {
port: 5173,
},
preview: {
port: 4173,
},
build: {
target: 'baseline-widely-available',
sourcemap: 'hidden',
},
});
- target: ‘baseline-widely-available’ — современные браузеры (Chrome 107+, Edge 107+, Firefox 104+, Safari 16+). При необходимости можно задать
es2022или использовать@vitejs/plugin-legacyдля старых браузеров. - sourcemap: ‘hidden’ — карты генерируются (для Sentry/логов), в бандл не добавляется комментарий; пользователь не тянет .map. Варианты:
true(отдельные .map + комментарий),false(без карт). - Файл в корне проекта как
vite.config.ts. Для React/Vue/Svelte добавьте плагин вplugins(например@vitejs/plugin-react).
Когда такого конфига достаточно: SPA/MPA на React, Vue, Svelte или vanilla TS/JS; один вход (index.html); деплой — статика в dist, раздача через nginx/CDN.
Когда расширять: плагин фреймворка; base: '/app/' если приложение не в корне; define для глобальных констант; server.proxy для API в dev; SVG как компоненты, legacy, SSR — по документации Vite.
Проверка
-
Сборка — в корне проекта выполните
pnpm build(илиnpm run build). Должна создаться папкаdistбез ошибок. Проверьте размер выхода и наличие чанков/ассетов. -
Preview — выполните
pnpm preview. Сервер поднимется на порту 4173 (или указанном вpreview.port). Откройте в браузере и убедитесь, что приложение открывается и алиас@/работает (импорты изsrc/разрешаются). -
Sourcemap — после сборки в
distне должно быть комментария//# sourceMappingURL=в основных бандлах приsourcemap: 'hidden'. Файлы .map могут присутствовать в dist; их можно не отдавать с сервера. Приsourcemap: trueв бандле будет ссылка на .map. -
Dev-сервер —
pnpm dev: приложение на порту 5173, HMR работает. Проверьте алиасы и при необходимости прокси вserver.proxy.
Типичные ошибки
- Использование несуществующих опций — все параметры должны быть из официальной документации Vite. Вымышленные или устаревшие ключи могут игнорироваться или ломать конфиг.
- __dirname в ESM — в ESM нет
__dirname; используйтеpath.dirname(fileURLToPath(import.meta.url))для путей относительно конфига. - Sourcemap в проде —
trueдобавляет ссылку на .map в бандл; если отдаёте .map с сервера, пользователь может видеть исходники. Для прода лучшеhiddenилиfalseи не отдавать .map публично. - Без плагина фреймворка — для JSX/TSX (React), Vue, Svelte нужен соответствующий плагин; иначе сборка или dev могут падать. Добавьте в
pluginsи установите пакет.
Где применять
- Новые проекты (SPA/MPA): React, Vue, Svelte, vanilla TS/JS. Локальная разработка и продакшн-сборка; деплой статики в dist.
- Миграция с Webpack: см. Типичная миграция Webpack → Vite и Webpack production-конфиг для сравнения.
Связанные сниппеты: Webpack: production-конфиг 2026, Типичная миграция Webpack → Vite.