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 已證明自己是全球數百萬開發人員可靠的朋友。
總之,讓我們看看這個內建支援是如何運作的(或者跳到注意事項部分)。
運作方式
使用 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
因此,如果您需要變數展開,您應該繼續使用 dotenv 和 dotenv-expand。
缺少 .env.vault
支援
.env.vault
檔案是 .env
檔案的精神繼承者。它們比 .env
檔案具有多種安全性優勢,您可以在這裡閱讀相關資訊。
它們很新,但對於生產和 ci 也非常有用,並且在多個社群(如 node、python、rust 等)中越來越受歡迎。
但是,作為一項新技術,在它們獲得與 .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 帳戶並立即試用。