vue項目中的.env文件加載方式
一、環(huán)境變量和模式
1. 環(huán)境變量
Vite 在一個特殊的 import.meta.env 對象上暴露環(huán)境變量。
這里有一些在所有情況下都可以使用的內建變量:
import.meta.env.MODE: {string}
應用運行的模式,該變量值就是你當前運行的 .env.{MODE}文件,例如:值為dev時,使用的就是 .env.dev這個文件import.meta.env.BASE_URL: {string}
部署應用時的基本 URL。他由base 配置項決定這個值就是你在vite.config.js中定義的base的值import.meta.env.PROD: {boolean}
應用是否運行在生產環(huán)境import.meta.env.DEV: {boolean}
應用是否運行在開發(fā)環(huán)境 (永遠與 import.meta.env.PROD相反)mport.meta.env.SSR: {boolean}
應用是否運行在 server 上
2. 生產環(huán)境替換
在生產環(huán)境中,這些環(huán)境變量會在構建時被靜態(tài)替換,因此,在引用它們時請使用完全靜態(tài)的字符串。動態(tài)的 key 將無法生效。例如,動態(tài) key 取值 import.meta.env[key] 是無效的。
它還將替換出現在 JavaScript 和 Vue 模板中的字符串。這本應是非常少見的,但也可能是不小心為之的。
在這種情況下你可能會看到類似 Missing Semicolon 或 Unexpected token 等錯誤,例如當 “process.env.NODE_ENV” 被替換為 "“development”: "。
有一些方法可以避免這個問題:
- 對于 JavaScript 字符串,你可以使用 unicode 零寬度空格來分割這個字符串,例如: ‘import.meta\u200b.env.MODE’
- 對于 Vue 模板或其他編譯到 JavaScript 字符串的 HTML,你可以使用 <wbr> 標簽,例如:import.meta.<wbr>env.MODE
二、.env 文件
1. 基本用法
Vite 使用 dotenv 從你的 環(huán)境目錄 中的下列文件加載額外的環(huán)境變量:
.env # 所有情況下都會加載 .env.local # 所有情況下都會加載,但會被 git 忽略 .env.[mode] # 只在指定模式下加載 .env.[mode].local # 只在指定模式下加載,但會被 git 忽略
環(huán)境加載優(yōu)先級
- 一份用于指定模式的文件(例如 .env.production)會比通用形式的優(yōu)先級更高(例如 .env)。
- 另外,Vite 執(zhí)行時已經存在的環(huán)境變量有最高的優(yōu)先級,不會被 .env 類文件覆蓋。例如當運行 VITE_SOME_KEY=123 vite build 的時候。
- .env 類文件會在 Vite 啟動一開始時被加載,而改動會在重啟服務器后生效。
加載的環(huán)境變量也會通過 import.meta.env 以字符串形式暴露給客戶端源碼。
為了防止意外地將一些環(huán)境變量泄漏到客戶端,只有以 VITE_ 為前綴的變量才會暴露給經過 vite 處理的代碼。例如下面這些環(huán)境變量:
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) // undefined
請注意,如果想要在環(huán)境變量中使用 $ 符號,則必須使用 \ 對其進行轉義。
KEY=123 NEW_KEY1=test$foo # test NEW_KEY2=test\$foo # test$foo NEW_KEY3=test$KEY # test123
如果你想自定義 env 變量的前綴,請參閱 envPrefix。
安全注意事項
- .env.*.local 文件應是本地的,可以包含敏感變量。你應該將 .local 添加到你的 .gitignore 中,以避免它們被 git 檢入。
- 由于任何暴露給 Vite 源碼的變量最終都將出現在客戶端包中,VITE_* 變量應該不包含任何敏感信息。
2. 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 }
三、模式
1. 基本用法
默認情況下,開發(fā)服務器 (dev 命令) 運行在 development (開發(fā)) 模式,而 build 命令則運行在 production (生產) 模式。
這意味著當執(zhí)行 vite build 時,它會自動加載 .env.production 中可能存在的環(huán)境變量:
# .env.production VITE_APP_TITLE=My App
在你的應用中,你可以使用 import.meta.env.VITE_APP_TITLE 渲染標題。
在某些情況下,若想在 vite build 時運行不同的模式來渲染不同的標題,你可以通過傳遞 --mode 選項標志來覆蓋命令使用的默認模式。
例如,如果你想在 staging (預發(fā)布)模式下構建應用:
vite build --mode staging
還需要新建一個 .env.staging 文件:
# .env.staging VITE_APP_TITLE=My App (staging)
由于 vite build 默認運行生產模式構建,你也可以通過使用不同的模式和對應的 .env 文件配置來改變它,用以運行開發(fā)模式的構建:
# .env.testing NODE_ENV=development
本文內容源自vite官方文檔
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
vue項目創(chuàng)建并引入餓了么elementUI組件的步驟
這篇文章主要介紹了vue項目創(chuàng)建并引入餓了么elementUI組件的步驟,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-04-04