Переменные И Режимы ENV
VITE раскрывает определенные константы под специальным объектом import.meta.env . Эти константы определяются как глобальные переменные во время DEV и статически заменяются при строительстве, чтобы повысить деревья эффективным.
Встроенные постоянные
Некоторые встроенные константы доступны во всех случаях:
import.meta.env.MODE: {строка} режим , в котором работает приложение.import.meta.env.BASE_URL: {строка} базовый URL. Приложение обслуживается. Это определяется опциейbaseконфигурации .import.meta.env.PROD: {boolean} независимо от того, работает ли приложение в производстве (запустив сервер Dev сNODE_ENV='production'или запустив приложение, построенное сNODE_ENV='production').import.meta.env.DEV: {boolean}, работает ли приложение в разработке (всегда противоположностьimport.meta.env.PROD)import.meta.env.SSR: {boolean}, работает ли приложение на сервере .
Env Переменные
VITE разоблачает переменные ENV под import.meta.env объектом в виде строк автоматически.
Чтобы предотвратить случайную утечку переменных ENV с клиентом, только переменные, префиксированные VITE_ подвергаются воздействию вашего кода, обработанного VITE. Например, для следующих переменных ENV:
VITE_SOME_KEY=123
DB_PASSWORD=foobarТолько VITE_SOME_KEY будет выставлен как import.meta.env.VITE_SOME_KEY для вашего клиентского исходного кода, но DB_PASSWORD не будут.
console.log(import.meta.env.VITE_SOME_KEY) // "123"
console.log(import.meta.env.DB_PASSWORD) // неопределенныйЕсли вы хотите настроить префикс переменных ENV, см. Параметр EnvPrefix .
Env parsing
Как показано выше, VITE_SOME_KEY - это число, но возвращает строку при разведке. То же самое также произойдет для логических переменных Env. Обязательно преобразуйте в нужный тип при его использовании в вашем коде.
.env файлов
Vite использует Dotenv для загрузки дополнительных переменных среды из следующих файлов в каталоге вашей среды :
.env # loaded in all cases
.env.local # loaded in all cases, ignored by git
.env.[mode] # only loaded in specified mode
.env.[mode].local # only loaded in specified mode, ignored by gitEnv Loading Priorities
Файл ENV для конкретного режима (например, .env.production ) будет иметь более высокий приоритет, чем общий (например, .env ).
VITE всегда будет загружаться .env и .env.local в дополнение к файлу .env.[mode] го режима. Переменные, объявленные в файлах, специфичных для режима, будут иметь приоритет над таковыми в общих файлах, но переменные, определенные только в .env или .env.local все еще будут доступны в среде.
Кроме того, переменные среды, которые уже существуют при выполнении VITE, имеют наивысший приоритет и не будут перезаписаны .env файлами. Например, при запуске VITE_SOME_KEY=123 vite build .
.env файлов загружаются в начале VITE. Перезагрузите сервер после внесения изменений.
Кроме того, Vite использует Dotenv-Expand для расширения переменных, написанных в файлах ENV, из коробки. Чтобы узнать больше о синтаксисе, ознакомьтесь с их документами .
Обратите внимание, что если вы хотите использовать $ внутри вашей среды, вы должны избежать его с помощью \ .
KEY=123
NEW_KEY1=test$foo # test
NEW_KEY2=test\$foo # test$foo
NEW_KEY3=test$KEY # test123SECURITY NOTES
.env.*.localфайлов только локальные и могут содержать конфиденциальные переменные. Вы должны добавить*.localк своим.gitignore, чтобы избежать их регистрации в git.Поскольку любые переменные, подвергшиеся воздействию вашего исходного кода Vite, окажутся в вашем клиентском пакете,
VITE_*переменных не должны содержать какую -либо конфиденциальную информацию.
Expanding variables in reverse order
VITE поддерживает расширение переменных в обратном порядке. Например, .env ниже будет оцениваться как VITE_FOO=foobar , VITE_BAR=bar .
VITE_FOO=foo${VITE_BAR}
VITE_BAR=barЭто не работает в сценариях оболочки и других инструментах, таких как docker-compose . Тем не менее, VITE поддерживает это поведение, так как это было поддержано dotenv-expand в течение долгого времени, а другие инструменты в экосистеме JavaScript используют более старые версии, которые поддерживают это поведение.
Чтобы избежать проблем с взаимодействием, рекомендуется не полагаться на это поведение. VITE может начать издавать предупреждения для этого поведения в будущем.
Intellisense для TypeScript
По умолчанию Vite предоставляет определения типа для import.meta.env в vite/client.d.ts . Несмотря на то, что вы можете определить более пользовательские переменные ENV в .env.[mode] файлах, вы можете получить TypeScript IntelliSense для определенных пользовательских переменных ENV, которые префикс с VITE_ .
Чтобы достичь этого, вы можете создать каталог vite-env.d.ts в src , а затем увеличить ImportMetaEnv как это:
///<reference types="vite/client">
interface ImportMetaEnv {
readonly VITE_APP_TITLE: string
// больше переменных Env ...
}
interface ImportMeta {
readonly env: ImportMetaEnv
}Если ваш код опирается на типы из средств браузеров, таких как DOM и веб -работник , вы можете обновить поле LIB в tsconfig.json .
{
"lib": ["WebWorker"]
}Imports will break type augmentation
Если увеличение ImportMetaEnv не работает, убедитесь, что у вас нет import операторов в vite-env.d.ts . Смотрите документацию TypeScript для получения дополнительной информации.
Постоянная замена HTML
VITE также поддерживает замену констант в файлах HTML. Любые свойства в import.meta.env могут использоваться в файлах HTML с помощью специального синтаксиса %CONST_NAME% :
<h1>Vite is running in %MODE%</h1>
<p>Using data from %VITE_API_URL%</p>Если Env не существует в import.meta.env , например, %NON_EXISTENT% , она будет игнорирована и не заменена, в отличие от import.meta.env.NON_EXISTENT в JS, где она заменяется как undefined .
Учитывая, что VITE используется многими рамками, он преднамеренно неопинирован в отношении сложных замен, таких как условные. VITE может быть расширен с помощью существующего плагина пользователя или пользовательского плагина, который реализует крюк transformIndexHtml .
Режимы
По умолчанию Dev Server (команда dev ) работает в режиме development , а команда build выполняется в режиме production .
Это означает, что при запуске vite build он загрузит переменные ENV из .env.production , если он есть:
VITE_APP_TITLE=My AppВ вашем приложении вы можете отображать заголовок, используя import.meta.env.VITE_APP_TITLE .
В некоторых случаях вы можете запустить vite build с другим режимом, чтобы отобразить другой заголовок. Вы можете перезаписать режим по умолчанию, используемый для команды, пропустив флаг --mode опции. Например, если вы хотите создать свое приложение для режима постановки:
vite build --mode stagingИ создать файл .env.staging :
VITE_APP_TITLE=My App (staging)Поскольку vite build запускает производственную сборку по умолчанию, вы также можете изменить ее и запустить сборку разработки, используя другой режим и .env конфигурацию файла:
NODE_ENV=developmentNode_env и режимы
Важно отметить, что NODE_ENV ( process.env.NODE_ENV ) и режимы являются двумя разными понятиями. Вот как разные команды влияют на NODE_ENV и режим:
| Командование | Node_env | Режим |
|---|---|---|
vite build | "production" | "production" |
vite build --mode development | "production" | "development" |
NODE_ENV=development vite build | "development" | "production" |
NODE_ENV=development vite build --mode development | "development" | "development" |
Различные значения NODE_ENV и режима также отражаются на соответствующих import.meta.env свойствах:
| Командование | import.meta.env.PROD | import.meta.env.DEV |
|---|---|---|
NODE_ENV=production | true | false |
NODE_ENV=development | false | true |
NODE_ENV=other | false | true |
| Командование | import.meta.env.MODE |
|---|---|
--mode production | "production" |
--mode development | "development" |
--mode staging | "staging" |
NODE_ENV in .env files
NODE_ENV=... может быть установлен в команде, а также в вашем .env файле. Если NODE_ENV указан в .env.[mode] файле, режим можно использовать для управления его значением. Тем не менее, оба NODE_ENV и режима остаются как две разные понятия.
Основное преимущество с NODE_ENV=... в команде заключается в том, что он позволяет VITE обнаружить значение на раннем этапе. Это также позволяет вам читать process.env.NODE_ENV в конфигурации VITE, поскольку VITE может загружать файлы ENV только после того, как конфигурация будет оценена.