Режимы выполнения в Vite тесно связаны с системой окружений и влияют
на поведение сборщика, загрузку переменных и конфигурацию проекта.
Параметр командной строки --mode позволяет явно
переопределять стандартный режим работы, управляя тем, какие
.env файлы будут подхвачены и какие значения окажутся
доступными в import.meta.env.
По умолчанию Vite использует два основных режима:
development — при запуске dev-сервера
(vite)production — при сборке (vite build)Эти режимы определяют:
.env файловimport.meta.env.MODEКлючевой момент: режим не является просто строковой меткой, он влияет на всю систему окружения проекта.
Флаг --mode позволяет переопределить стандартный режим
выполнения:
vite --mode staging
vite build --mode staging
vite preview --mode staging
В этом случае вместо стандартных development или
production будет использован режим
staging.
Значение --mode влияет на:
import.meta.env.MODE.env файловdefineConfigПри запуске Vite режим определяется по следующему правилу:
Если указан --mode, используется его
значение
Если не указан:
vite → developmentvite build → productionvite preview → productionТаким образом, CLI-флаг имеет наивысший приоритет.
Vite использует систему файлов окружения, где режим напрямую влияет на порядок загрузки:
.env.env.local.env.[mode].env.[mode].localЕсли указан:
vite --mode staging
то будут загружены:
.env.env.local.env.staging.env.staging.localЭто позволяет полностью разделять конфигурации окружений, не меняя код приложения.
Текущий режим доступен через:
import.meta.env.MODE
Пример:
if (import.meta.env.MODE === 'staging') {
console.log('Работаем в staging окружении')
}
Также режим влияет на другие встроенные переменные:
import.meta.env.DEVimport.meta.env.PRODОни вычисляются на основе режима:
DEV = true, если mode === developmentPROD = true, если mode === productionКонфигурация Vite может быть функцией, получающей объект контекста:
import { defineConfig } from 'vite'
export default defineConfig(({ mode }) => {
return {
define: {
__APP_MODE__: JSON.stringify(mode)
}
}
})
Если запустить:
vite --mode staging
то mode внутри конфигурации будет равен
"staging".
Это позволяет:
Флаг --mode часто используется для создания
дополнительных окружений:
vite build --mode staging
.env.staging:
VITE_API_URL=https://staging.api.example.com
VITE_DEBUG=true
vite build --mode production
или даже:
vite build --mode production-us
в случае региональных сборок.
Важно, что только переменные с префиксом VITE_ доступны
в коде:
VITE_API_URL=https://api.example.com
SECRET_KEY=12345
В код попадёт только:
import.meta.env.VITE_API_URL
даже при использовании --mode.
import.meta.env формируется на этапе сборки и
включает:
Пример:
console.log(import.meta.env.MODE)
console.log(import.meta.env.VITE_API_URL)
При запуске:
vite --mode staging
результат будет зависеть от .env.staging.
vite build --mode staging
staging.env.stagingvite preview --mode staging
.env.staging также применяетсяvite --mode development
vite --mode staging
vite --mode production
VITE_FEATURE_X=true
и управление через mode-файлы.
Если файл назван:
.env.stage
а используется:
vite --mode staging
он не будет загружен, потому что имя должно совпадать строго.
API_URL=https://example.com
в коде:
import.meta.env.API_URL // undefined
Типичный package.json:
{
"scripts": {
"dev": "vite",
"dev:staging": "vite --mode staging",
"build": "vite build",
"build:staging": "vite build --mode staging"
}
}
Такой подход позволяет централизованно управлять окружениями без изменения кода.
Механизм можно свести к последовательности:
.env файлыimport.meta.envvite.config.jsКлючевое свойство системы заключается в том, что --mode
управляет не только строковым значением, но и всей цепочкой конфигурации
и окружения приложения.