1. 程式人生 > 其它 >process.env環境變數

process.env環境變數

Env的種類和範圍

模式和環境變數

模式

模式是 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/