Vite 在一個特殊的 ?import.meta.env
? 對象上暴露環(huán)境變量。這里有一些在所有情況下都可以使用的內(nèi)建變量:
import.meta.env.MODE
?: {string} 應用運行的模式。import.meta.env.BASE_URL
?: {string} 部署應用時的基本 URL。他由?base
? 配置項決定。import.meta.env.PROD
?: {boolean} 應用是否運行在生產(chǎn)環(huán)境。import.meta.env.DEV
?: {boolean} 應用是否運行在開發(fā)環(huán)境 (永遠與 ?import.meta.env.PROD
?相反)。在生產(chǎn)環(huán)境中,這些環(huán)境變量會在構(gòu)建時被靜態(tài)替換,因此,在引用它們時請使用完全靜態(tài)的字符串。動態(tài)的 key 將無法生效。例如,動態(tài) key 取值 ?import.meta.env[key]
? 是無效的。
它還將替換出現(xiàn)在 JavaScript 和 Vue 模板中的字符串。這本應是非常少見的,但也可能是不小心為之的。在這種情況下你可能會看到類似 ?Missing Semicolon
? 或 ?Unexpected token
? 等錯誤,例如當 ?"process.env.NODE_ENV"
? 被替換為 ?"development": ""
?。有一些方法可以避免這個問題:
\u200b
? (一個看不見的分隔符)來分割這個字符串,例如: ?'import.meta\u200b.env.MODE'
?。import.meta.<wbr>env.MODE
?。Vite 使用 dotenv 從你的 環(huán)境目錄 中的下列文件加載額外的環(huán)境變量:
.env # 所有情況下都會加載
.env.local # 所有情況下都會加載,但會被 git 忽略
.env.[mode] # 只在指定模式下加載
.env.[mode].local # 只在指定模式下加載,但會被 git 忽略
加載的環(huán)境變量也會通過 ?import.meta.env
? 暴露給客戶端源碼。
為了防止意外地將一些環(huán)境變量泄漏到客戶端,只有以 ?VITE_
? 為前綴的變量才會暴露給經(jīng)過 vite 處理的代碼。例如下面這個文件中:
DB_PASSWORD=foobar
VITE_SOME_KEY=123
只有 VITE_SOME_KEY
會被暴露為 import.
提供給客戶端源碼,而 DB_PASSWORD
則不會。
注意事項:
.env.*.local
? 文件應是本地的,可以包含敏感變量。你應該將 ?.local
? 添加到你的 ?.gitignore
? 中,以避免它們被 git 檢入。VITE_*
? 變量應該不包含任何敏感信息。默認情況下,Vite 在 vite/client.d.ts 中為 ?import.meta.env
? 提供了類型定義。隨著在 ?.env[mode]
? 文件中自定義了越來越多的環(huán)境變量,你可能想要在代碼中獲取這些以 ?VITE_
? 為前綴的用戶自定義環(huán)境變量的 TypeScript 智能提示。
要想做到這一點,你可以在 ?src
? 目錄下創(chuàng)建一個 ?env.d.ts
? 文件,接著按下面這樣增加 ?ImportMetaEnv
? 的定義:
/// <reference types="vite/client" />
interface ImportMetaEnv {
readonly VITE_APP_TITLE: string
// 更多環(huán)境變量...
}
interface ImportMeta {
readonly env: ImportMetaEnv
}
默認情況下,開發(fā)服務器 (?dev
命令) 運行在 ?development
(開發(fā)) 模式,而 ?build
以及 ?serve
命令則運行在 ?production
? (生產(chǎn)) 模式。
這意味著當執(zhí)行 ?vite build
? 時,它會自動加載 ?.env.production
? 中可能存在的環(huán)境變量:
# .env.production
VITE_APP_TITLE=My App
在你的應用中,你可以使用 ?import.meta.env.VITE_APP_TITLE
? 渲染標題。
然而,重要的是要理解 模式 是一個更廣泛的概念,而不僅僅是開發(fā)和生產(chǎn)。一個典型的例子是,你可能希望有一個 “staging” (預發(fā)布|預上線) 模式,它應該具有類似于生產(chǎn)的行為,但環(huán)境變量與生產(chǎn)環(huán)境略有不同。
你可以通過傳遞 ?--mode
? 選項標志來覆蓋命令使用的默認模式。例如,如果你想為我們假設的 staging 模式構(gòu)建應用:
vite build --mode staging
為了使應用實現(xiàn)預期行為,我們還需要一個 .env.staging
文件:
# .env.staging
NODE_ENV=production
VITE_APP_TITLE=My App (staging)
現(xiàn)在,你的 staging 應用應該具有類似于生產(chǎn)的行為,但顯示的標題與生產(chǎn)環(huán)境不同。
更多建議: