← 返回部落格 Mot

Mot

Node.js 20.6.0 內建支援 .env 檔案

Node v20.6.0+ 新增了原生支援載入 .env 檔案的功能。

node --env-file=.env index.js

哇,太酷了!

dotenv 是否已死停止使用它?別急。先別急著捨棄 dotenv。您應該先了解一些注意事項。

首先,我想說,很高興看到 NodeJS 團隊為開發人員採用了一流的 .env 支援。身為 dotenv 的先驅之一,我感到很榮幸。dotenv 在 GitHub 上被超過 1400 萬個開源儲存庫所依賴,並且每週下載次數超過 3500 萬次dotenv 已證明自己是全球數百萬開發人員可靠的朋友。

總之,讓我們看看這個內建支援是如何運作的(或者跳到注意事項部分)。

在這個部落格文章中,請在 GitHub 上找到完整的程式碼範例

運作方式

使用 nvm 安裝 Node v20.6.0 或更高版本。

nvm install 20.6.0
nvm use 20.6.0
node -v
v20.6.0

建立您的 .env 檔案。

HELLO="World"

建立您的 node 腳本以使用它。

// index.js
console.log(`Hello ${process.env.HELLO}`)

使用 --env-file 標記執行它。

node --env-file=.env index.js
Hello World

就是這樣!

想要在生產環境中執行它嗎?只需將其指向 .env.production 檔案。

# .env.production
HELLO="production"
node --env-file=.env.production index.js

注意事項

目前最大的注意事項是,這仍然是一項實驗性功能。這表示它會帶有 錯誤,並且缺少 功能支援頂部的 hn 評論很好地總結了這一點 - 儘管有點牢騷。

我也想強調目前這個詞,因為這一切都還在積極開發中。這些事情需要時間。當您閱讀這篇文章時,其中一些注意事項可能已不復存在。

缺少多行支援

目前的實作不支援多行環境變數。如果您嘗試包含多行環境變數,它將會是 undefined。例如

# .env.multiline
HELLO="This
is
a
multiline"
// index.js
console.log(`Hello ${process.env.HELLO}`)
node --env-file=.env.multiline index.js
Hello undefined

注意:多行支援正在積極討論中,並且可能會在不久的將來新增。

缺少覆寫選項

您無法使用 .env 檔案覆寫系統的環境變數。沒有任何選項。

# .env
HELLO="World"
// index.js
console.log(`Hello ${process.env.HELLO}`)
export HELLO="System"
node --env-file=.env index.js
Hello System

它會印出 Hello System 而不是 Hello World。沒有覆寫系統變數的選項。

如果您需要這樣做,請繼續使用 dotenv 並其覆寫選項

缺少變數展開

dotenv 的變數展開支援存在於一個單獨的程式庫 dotenv-expand 中。但是它被 廣泛使用,每週有 1300 萬次下載,因此實際上被視為 dotenv 的一部分。

在撰寫本文時,Node 不支援變數展開。相反,它會將變數作為字串輸出。

# .env
PASSWORD="password123"
SECRET=$PASSWORD
// index.js
console.log(`The secret is ${process.env.SECRET}`)
node --env-file=.env index.js
The secret is $PASSWORD

因此,如果您需要變數展開,您應該繼續使用 dotenvdotenv-expand

缺少 .env.vault 支援

.env.vault 檔案是 .env 檔案的精神繼承者。它們比 .env 檔案具有多種安全性優勢,您可以在這裡閱讀相關資訊

它們很,但對於生產和 ci 也非常有用,並且在多個社群(如 nodepythonrust 等)中越來越受歡迎。

但是,作為一項新技術,在它們獲得與 .env 檔案類似的廣泛使用之前,不太可能被 Node 原生採用。因此,如果您計劃使用它們,請繼續使用 dotenv

#/-------------------.env.vault---------------------/
#/         cloud-agnostic vaulting standard         /
#/   [how it works](https://dotenv.org/env-vault)   /
#/--------------------------------------------------/
# development
DOTENV_VAULT_DEVELOPMENT="AtEC33ZfFJQMSE6C+EBX8nzTyQzfC+xhsIfGjyWr47jiHsUi07PHzX2/RmCB0PIi"
# production
DOTENV_VAULT_PRODUCTION="t9van8HefnTIHVlK3vQ6WYLtWEOvPunEnOphV3Hw3aBTBDuwLq22yU0Tdl5fAnk="

結論

總而言之,對 .env 檔案的內建支援(即使目前是實驗性的)對於 Node 來說是一個巨大且值得歡迎的進步。非常感謝 Yagiz Nizipli 為此所做的努力。在 GitHub 上贊助他。他正在為 Node 做著令人難以置信的工作。

但是,目前存在一些注意事項,我建議您目前不要從您的生產應用程式中解除安裝 dotenv。請等到它不再是實驗性的,並且新增了對上述遺失功能的支援。


正在使用新的 --env-file 標記嗎?

dotenv-vault 是完美的伴侶。使用它來同步您的 .env 檔案,並輕鬆在環境之間切換。建立您的 Dotenv 帳戶並立即試用。

https://dotenv.org/signup

透過 RSS 訂閱 或追蹤我們的 @dotenvx 𝕏