簡體   English   中英

.env 與配置 json

[英].env vs config.json

我剛開始學習JavaScript / node.js (對后端 webdev 的簡單介紹),因此我對這個主題完全陌生。

幾天前,我正在閱讀一個教程,從中我學會了將我的機密數據(如密碼)保存在config.json文件中。

今天我(偶然地)發現了.env文件,而且我對它了解得越多,似乎越多的人使用它來實際存儲密碼。

那么什么時候應該使用.env什么時候應該使用config.json

問題

什么時候應該使用.env而不是config.json用於什么?

答案

這是一個相當困難的答案。 一方面,在開發過程中,您應該只使用這些工具中的任何一種。 這意味着在生產或類似prod的環境中,您可以將這些變量直接添加到環境中:

NODE_ENV=development node ./sample.js --mongodb:host "dharma.mongohq.com" --mongodb:port 10065

另一方本身並沒有真正明顯的贏家,因為它們在不同方面都有幫助。 您可以使用config.json嵌套數據,但另一方面,您也可以使用.env更清晰的數據結構

還有一點需要注意的是,你永遠不想將這些文件提交給源代碼控制(git,svc等)。

另一方面,這些工具使初學者很容易快速入門,而不必擔心如何設置環境變量以及Windows環境和Linux環境之間的差異。

總而言之,我要說它真的取決於開發人員。

這在很大程度上取決於個人偏好和您正在使用的框架的慣例。 它們只是用於存儲相同類型信息的不同格式。

一些示例配置文件格式:

  • .env
  • *.yml (YAML文件)
  • *.ini (通常僅限Windows)
  • *.json

在一天結束時,它們都實現了相同的目的:為應用程序提供特定於環境的信息(憑據,文件路徑,連接字符串等)。 選擇最適合您選擇框架的格式。

.env文件通常用於存儲與特定部署環境相關的信息,而config.json文件可能用於存儲特定於應用程序的數據。

這兩種方法都有效,以及您的配置文件是否存儲在您的存儲庫中更多的是數據是否需要保密。

我認為這取決於你,重要的是要記住你使用這種方法的原因。 我們的想法是將敏感數據保存在一個文件中,該文件不會被推送到源代碼控制或本地環境以外的任何其他位置 - 這樣可以使數據更安全。 然后,當您准備好在某處部署到遠程服務器時,您需要手動將這些值插入該環境中。

我通常使用.env因為在許多遠程環境中都支持從.env文件獲取數據的語法 - 比如heroku。 當我將應用程序部署到heroku時,我可以進入應用程序的設置並使用heroku儀表板UI輸入環境變量 - 我不必弄清楚如何手動創建json文件等等... (也許還有其他解決方法)。 在變量到位后,我只使用process.env.variableName來訪問數據。

我更喜歡 json 因為 typescript 可以從中推斷類型,這對於 env 文件是不可能的

統計比較兩個NPM包 (以及其他類似的解決方案)可能是自己決定的最佳方式。

在撰寫本文時, dotenv是一個小得多的包,有更大的支持(除了實際的貢獻者,只能通過剩余問題的數量和巨大的受歡迎程度來推斷)。 它也更新了2。5年,如果宣傳對你很重要,那么它的星數是它的兩倍。

在此輸入圖像描述

如果您的目標是在 Docker 中部署應用程序,那么.env是 100% 的選擇。 config.json使用嵌套數據的能力很棒,但是當您需要將該數據遷移到.env以使用 Docker 進行部署時,您將需要查看一些 PITA。 docker build.env docker-compose都被設計為.env本機使用.env ,所以如果你從它開始,那么它將有助於“Dockerizing”你的應用程序的順利路徑。

我目前正在移植一個應用程序以在 Docker 中運行,該應用程序沒有這樣的先見之明,這非常痛苦......大量重構,適用於嵌套的東西。 基本的key:value屬性很容易遷移到.env

~$ cat config.json
{
  "PROTOCOL": "https",
  "HOST": "example.com",
  "PORT": 443
}
...

~$ cat .env
PROTOCOL="https"
HOST="example.com"
PORT=443

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM