Порядок загрузки переменных окружения в Vite строится на принципе
последовательного наложения файлов с возможностью переопределения
значений в зависимости от режима запуска и локальной среды разработки.
Источник конфигурации определяется набором файлов .env,
которые подхватываются из корня проекта и обрабатываются в строго
определённой очередности.
Vite при старте приложения анализирует переменные окружения и
формирует итоговый набор значений, доступных через
import.meta.env. При этом используется несколько файлов,
каждый из которых имеет свою область применения и приоритет.
Основная идея заключается в том, что более специфичные файлы переопределяют значения из более общих.
При запуске Vite в любом режиме (development, production или пользовательском mode) файлы обрабатываются в следующем порядке:
.env.env.local.env.[mode].env.[mode].localЭтот порядок отражает принцип «от общего к частному», где каждый последующий слой может переопределить предыдущий.
Файл .env является фундаментом всей системы переменных
окружения.
Он используется для хранения значений, которые:
Пример содержимого:
VITE_API_URL=https://api.example.com
VITE_APP_NAME=MyApp
Значения из этого файла считаются базовыми и могут быть переопределены на следующих этапах загрузки.
Файл .env.local предназначен для машинно-специфичных
настроек. Он:
.gitignore);.env.Типичный сценарий использования:
VITE_API_URL=http://localhost:3000
Если в .env уже задан VITE_API_URL,
значение из .env.local его заменит.
Важно учитывать, что .env.local применяется ко всем
режимам, если не переопределён дальше.
Файлы вида .env.development,
.env.production, .env.test привязываются к
конкретному режиму запуска Vite.
Режим определяется параметром --mode, например:
vite --mode development
vite build --mode production
В этом случае Vite подгружает файл, соответствующий текущему режиму.
Пример .env.development:
VITE_DEBUG=true
VITE_API_URL=http://dev.api.local
Данный слой позволяет разделять конфигурации между окружениями, не затрагивая базовые настройки.
Файл .env.[mode].local является самым приоритетным в
цепочке загрузки.
Он объединяет два принципа:
Пример .env.production.local:
VITE_API_URL=https://staging.api.internal
Этот файл используется для ситуаций, когда необходимо переопределить даже режимо-специфичные настройки без изменения общего окружения проекта.
Если один и тот же ключ встречается во всех файлах, итоговое значение формируется по следующему принципу:
.env
↓ переопределяется
.env.local
↓ переопределяется
.env.[mode]
↓ переопределяется
.env.[mode].local
Таким образом, последний найденный источник всегда имеет приоритет.
Если переменная определена в нескольких файлах, Vite применяет правило «последний загруженный выигрывает». Это означает:
Пример:
.env
VITE_MODE=base
.env.production
VITE_MODE=production
Итог при --mode production:
VITE_MODE=production
Vite не передаёт в клиентский код все переменные окружения. Существует жёсткое ограничение:
VITE_ доступны в
import.meta.env;Это правило действует независимо от файла (.env,
.env.local и т.д.).
При запуске dev-сервера:
.env требуют перезапуска сервера;Это важно учитывать при отладке конфигурации, так как ожидание «горячего обновления» env-файлов не соответствует реальному поведению Vite.
Во время vite build используется тот же механизм, что и
в dev-режиме, но с учётом режима production по умолчанию
(если не указан --mode).
Это означает:
.env.production применяется автоматически;.env.production.local может переопределить значения для
конкретной машины;В типичном проекте структура env-файлов выглядит следующим образом:
.env — общие настройки (API, название приложения).env.local — локальные dev-переопределения.env.development — настройки для разработки.env.production — настройки для продакшена.env.production.local — локальные override для
продакшенаТакое разделение позволяет изолировать:
Если представить процесс в виде алгоритма, он выглядит так:
.env.env.local, перезаписывая совпадающие
ключи.env.[mode], перезаписывая совпадения.env.[mode].local как финальный слойИтоговый объект формируется до запуска приложения и становится источником для всей дальнейшей работы Vite.