process.env環境變量


Env的種類和范圍

img

模式和環境變量

模式

模式是 Vue CLI 項目中一個重要的概念。默認情況下,一個 Vue CLI 項目有三個模式:

  • development 模式用於 vue-cli-service serve

  • test 模式用於 vue-cli-service test:unit

  • production 模式用於 vue-cli-service buildvue-cli-service test:e2e

你可以通過傳遞 --mode 選項參數為命令行覆寫默認的模式。例如,如果你想要在構建命令中使用開發環境變量:

vue-cli-service build --mode development

當運行 vue-cli-service 命令時,所有的環境變量都從對應的環境文件中載入。如果文件內部不包含 NODE_ENV 變量,它的值將取決於模式,例如,在 production 模式下被設置為 "production",在 test 模式下被設置為 "test",默認則是 "development"

NODE_ENV 將決定您的應用運行的模式,是開發,生產還是測試,因此也決定了創建哪種 webpack 配置。

例如通過將 NODE_ENV 設置為 "test",Vue CLI 會創建一個優化過后的,並且旨在用於單元測試的 webpack 配置,它並不會處理圖片以及一些對單元測試非必需的其他資源。

同理,NODE_ENV=development 創建一個 webpack 配置,該配置啟用熱更新,不會對資源進行 hash 也不會打出 vendor bundles,目的是為了在開發的時候能夠快速重新構建。

當你運行 vue-cli-service build 命令時,無論你要部署到哪個環境,應該始終把 NODE_ENV 設置為 "production" 來獲取可用於部署的應用程序。

NODE_ENV

如果在環境中有默認的 `NODE_ENV`,你應該移除它或在運行 `vue-cli-service` 命令的時候明確地設置 `NODE_ENV`

環境變量

你可以在你的項目根目錄中放置下列文件來指定環境變量:

.env                # 在所有的環境中被載入
.env.local          # 在所有的環境中被載入,但會被 git 忽略
.env.[mode]         # 只在指定的模式中被載入
.env.[mode].local   # 只在指定的模式中被載入,但會被 git 忽略

一個環境文件只包含環境變量的“鍵=值”對:

FOO=bar
VUE_APP_NOT_SECRET_CODE=some_value

請注意,只有 NODE_ENVBASE_URL 和以 VUE_APP_ 開頭的變量將通過 webpack.DefinePlugin 靜態地嵌入到客戶端側的代碼中。這是為了避免意外公開機器上可能具有相同名稱的私鑰。

想要了解解析環境文件規則的細節,請參考 dotenv。我們也使用 dotenv-expand 來實現變量擴展 (Vue CLI 3.5+ 支持)。例如:

FOO=foo
BAR=bar

CONCAT=$FOO$BAR # CONCAT=foobar

被載入的變量將會對 vue-cli-service 的所有命令、插件和依賴可用。

環境文件加載優先級

為一個特定模式准備的環境文件 (例如 .env.production) 將會比一般的環境文件 (例如 .env) 擁有更高的優先級。

此外,Vue CLI 啟動時已經存在的環境變量擁有最高優先級,並不會被 .env 文件覆寫。

.env 環境文件是通過運行 vue-cli-service 命令載入的,因此環境文件發生變化,你需要重啟服務。

示例:Staging 模式

假設我們有一個應用包含以下 .env 文件:

VUE_APP_TITLE=My App

.env.staging 文件:

NODE_ENV=production
VUE_APP_TITLE=My App (staging)
  • vue-cli-service build 會加載可能存在的 .env.env.production.env.production.local 文件然后構建出生產環境應用。

  • vue-cli-service build --mode staging 會在 staging 模式下加載可能存在的 .env.env.staging.env.staging.local 文件然后構建出生產環境應用。

這兩種情況下,根據 NODE_ENV,構建出的應用都是生產環境應用,但是在 staging 版本中,process.env.VUE_APP_TITLE 被覆寫成了另一個值。

在客戶端側代碼中使用環境變量

只有以 VUE_APP_ 開頭的變量會被 webpack.DefinePlugin 靜態嵌入到客戶端側的包中。你可以在應用的代碼中這樣訪問它們:

console.log(process.env.VUE_APP_SECRET)

在構建過程中,process.env.VUE_APP_SECRET 將會被相應的值所取代。在 VUE_APP_SECRET=secret 的情況下,它會被替換為 "secret"

除了 VUE_APP_* 變量之外,在你的應用代碼中始終可用的還有兩個特殊的變量:

  • NODE_ENV - 會是 "development""production""test" 中的一個。具體的值取決於應用運行的模式

  • BASE_URL - 會和 vue.config.js 中的 publicPath 選項相符,即你的應用會部署到的基礎路徑。

所有解析出來的環境變量都可以在 public/index.html 中以 HTML 插值中介紹的方式使用。

提示

你可以在 vue.config.js 文件中計算環境變量。它們仍然需要以 VUE_APP_ 前綴開頭。這可以用於版本信息:

process.env.VUE_APP_VERSION = require('./package.json').version

module.exports = {
 // config
}

只在本地有效的變量

有的時候你可能有一些不應該提交到代碼倉庫中的變量,尤其是當你的項目托管在公共倉庫時。這種情況下你應該使用一個 .env.local 文件取而代之。本地環境文件默認會被忽略,且出現在 .gitignore 中。

.local 也可以加在指定模式的環境文件上,比如 .env.development.local 將會在 development 模式下被載入,且被 git 忽略。

參考:

1.https://cli.vuejs.org/zh/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM