99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

Vite 環(huán)境變量和模式

2022-03-07 13:53 更新

環(huán)境變量

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)境替換

在生產(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": ""?。有一些方法可以避免這個問題:

  • 對于 JavaScript 字符串,你可以使用 unicode 零寬度空格 ?\u200b? (一個看不見的分隔符)來分割這個字符串,例如: ?'import.meta\u200b.env.MODE'?。
  • 對于 Vue 模板或其他編譯到 JavaScript 字符串的 HTML,你可以使用 <wbr> 標簽,例如:?import.meta.<wbr>env.MODE?。

.env文件

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.meta.env.VITE_SOME_KEY 提供給客戶端源碼,而 DB_PASSWORD 則不會。

注意事項:

  • ?.env.*.local? 文件應是本地的,可以包含敏感變量。你應該將 ?.local? 添加到你的 ?.gitignore? 中,以避免它們被 git 檢入。
  • 由于任何暴露給 Vite 源碼的變量最終都將出現(xiàn)在客戶端包中,?VITE_*? 變量應該不包含任何敏感信息。

TypeScript的智能提示

默認情況下,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)境不同。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號