В Vite режим определяется значением mode, которое влияет
на загрузку переменных окружения, поведение сборки и доступные
конфигурационные ветки. По умолчанию используется два базовых режима:
development и production, но архитектура
позволяет создавать произвольные режимы для разных сценариев
развертывания.
Режим передаётся через CLI и доступен внутри конфигурации:
vite --mode staging
vite build --mode production
Значение режима доступно в конфигурационном файле:
export default ({ mode }) => {
console.log(mode);
return {};
};
Режим влияет на три ключевых аспекта:
.env файловimport.meta.env.MODEdefineConfigVite автоматически подхватывает файлы окружения в зависимости от режима:
.env → базовые переменные
.env.local → локальные переопределения
.env.development → режим разработки
.env.production → режим продакшена
.env.staging → пользовательский режим
Порядок приоритета:
.env < .env.[mode] < .env.local < .env.[mode].local
Пользовательский режим создаётся простым указанием имени через
--mode:
vite --mode staging
или
vite build --mode test
После этого Vite начинает искать соответствующие .env
файлы:
.env.test
.env.test.local
Если такие файлы отсутствуют, используются только базовые
.env.
Конфигурация Vite может быть функцией, принимающей объект с
параметрами, включая mode:
import { defineConfig } from 'vite';
export default defineConfig(({ mode }) => {
const isProduction = mode === 'production';
const isStaging = mode === 'staging';
return {
server: {
port: isStaging ? 8080 : 3000
},
build: {
sourcemap: !isProduction
}
};
});
Такой подход позволяет полностью управлять конфигурацией в зависимости от среды.
Внутри клиентского кода режим доступен через:
console.log(import.meta.env.MODE);
Также доступны производные флаги:
import.meta.env.DEV
import.meta.env.PROD
Они вычисляются автоматически:
DEV = mode === 'development'PROD = mode === 'production'Важно учитывать, что пользовательские режимы (например,
staging) не переводят PROD в
true.
Только переменные с префиксом VITE_ попадают в
клиентский код:
VITE_API_URL=https://api.example.com
VITE_FEATURE_FLAG=true
Использование:
const apiUrl = import.meta.env.VITE_API_URL;
При смене режима меняется источник загрузки этих переменных, но сам механизм экспорта остаётся одинаковым.
Режим часто используется для разделения конфигураций:
export default defineConfig(({ mode }) => {
switch (mode) {
case 'development':
return {
server: {
hmr: true
}
};
case 'staging':
return {
server: {
port: 4173
}
};
default:
return {
build: {
minify: true
}
};
}
});
Такой подход позволяет полностью изолировать поведение среды.
Режим влияет и на подключение плагинов:
import react from '@vitejs/plugin-react';
export default defineConfig(({ mode }) => {
const isAnalyze = mode === 'analyze';
return {
plugins: [
react(),
isAnalyze && {
name: 'bundle-analyzer-mock'
}
].filter(Boolean)
};
});
Таким образом, плагины могут включаться только в определённых режимах.
При vite build режим по умолчанию —
production. Это влияет на:
Пример условного кода:
if (import.meta.env.DEV) {
console.log('debug info');
}
Этот код будет удалён при production-сборке.
Распространённая практика — создание набора режимов:
development
production
staging
qa
demo
Каждый режим сопровождается собственным .env:
.env.qa
.env.demo
Пример запуска:
vite build --mode qa
Vite не использует NODE_ENV как основной источник
режима, но синхронизирует его:
vite dev → developmentvite build → productionПри пользовательских режимах NODE_ENV остаётся
production для build-процессов, если не переопределён
вручную.
Плагины Vite получают режим через конфигурационный контекст:
export default function myPlugin() {
return {
name: 'my-plugin',
config(config, { mode }) {
if (mode === 'staging') {
console.log('staging mode enabled');
}
}
};
}
Это позволяет адаптировать поведение плагина под окружение.
Часто используется следующая структура:
.env
.env.development
.env.production
.env.staging
.env.staging.local
И соответствующие команды:
vite
vite build
vite build --mode staging
Каждый режим становится независимой конфигурационной сущностью, определяющей: