Vite предоставляет набор встроенных переменных окружения, доступных в
коде приложения через import.meta.env. Эти переменные
формируются на этапе сборки и разработки и позволяют управлять
поведением приложения без ручной настройки сборочного процесса. Они
являются частью спецификации Vite и не требуют дополнительной
конфигурации для базового использования.
Все встроенные переменные доступны через объект:
import.meta.env
Этот объект содержит как системные переменные Vite, так и
пользовательские переменные окружения, начинающиеся с префикса
VITE_. Однако системные переменные доступны всегда и не
требуют префикса.
Важно учитывать, что значения import.meta.env
инлайнются на этапе сборки, то есть заменяются
статическими значениями в финальном бандле. Это делает их удобными для
условной компиляции кода.
Переменная MODE определяет режим, в котором запущено
приложение.
import.meta.env.MODE
development — при запуске dev-сервера
(vite)production — при сборке (vite build)--modeПример запуска с кастомным режимом:
vite --mode staging
В этом случае:
import.meta.env.MODE === 'staging'
MODE применяется для различения конфигураций без
изменения кода:
if (import.meta.env.MODE === 'development') {
console.log('Режим разработки')
}
Или более универсально:
const isDev = import.meta.env.MODE === 'development'
const isProd = import.meta.env.MODE === 'production'
Переменная BASE_URL определяет базовый путь, по которому
развернуто приложение.
import.meta.env.BASE_URL
Значение формируется из настройки base в конфигурации
Vite:
// vite.config.js
export default {
base: '/app/'
}
В этом случае:
import.meta.env.BASE_URL === '/app/'
Если конфигурация не задана, используется /.
const logoUrl = `${import.meta.env.BASE_URL}logo.png`
Это позволяет корректно работать как в корне домена, так и при развертывании в поддиректории.
window.location.href = import.meta.env.BASE_URL + 'dashboard'
При использовании клиентских роутеров BASE_URL помогает
синхронизировать base path:
const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL),
routes
})
Переменная DEV является булевым индикатором режима
разработки.
import.meta.env.DEV
true — при запуске vitefalse — при vite buildDEV полностью заменяет необходимость проверки
MODE === 'development' в большинстве случаев.
if (import.meta.env.DEV) {
console.log('Debug информация')
}
if (import.meta.env.DEV) {
import('./dev-tools.js')
}
if (!import.meta.env.DEV) {
initAnalytics()
}
Переменная PROD — противоположность DEV,
указывает на production-сборку.
import.meta.env.PROD
true — при vite buildfalse — в режиме разработкиif (import.meta.env.PROD) {
enableCaching()
}
if (import.meta.env.PROD) {
console.log = () => {}
}
const apiUrl = import.meta.env.PROD
? 'https://api.example.com'
: 'http://localhost:3000'
Переменная SSR указывает, выполняется ли код в режиме
серверного рендеринга.
import.meta.env.SSR
true — при SSR-рендеринге (например, Vite SSR или
frameworks на его основе)false — в браузереSSR позволяет писать универсальный код, который
одинаково работает на сервере и клиенте, избегая ошибок, связанных с
отсутствием браузерных API.
if (!import.meta.env.SSR) {
window.localStorage.setItem('key', 'value')
}
if (import.meta.env.SSR) {
fetchDataFromDatabase()
} else {
fetchDataFromApi()
}
const storage = import.meta.env.SSR
? createMemoryStorage()
: window.localStorage
Встроенные переменные часто применяются вместе для построения условной логики окружения.
const isDev = import.meta.env.DEV
const isProd = import.meta.env.PROD
const isSSR = import.meta.env.SSR
const apiBase =
isSSR
? 'http://internal-api'
: isProd
? 'https://api.example.com'
: 'http://localhost:3000'
if (import.meta.env.DEV && !import.meta.env.SSR) {
enableReactDevTools()
}
const log = (...args) => {
if (import.meta.env.DEV) {
console.log(...args)
}
}
Все переменные import.meta.env.* заменяются во время
сборки. Это означает:
Встроенные переменные фиксированы:
MODEBASE_URLDEVPRODSSRЛюбые дополнительные значения должны задаваться через
.env файлы с префиксом VITE_.
import.meta.env.DEV = false // не работает
Использование встроенных переменных позволяет:
Эти переменные становятся базовым слоем окружения, на котором строится вся конфигурационная логика приложения в Vite.