看看有沒有人能解惑
我一直在做一些研究,我發現了一些在構建后注入的庫,但這不是我想要的。我想要的是構建專案,然后注入登臺或生產環境。所以基本上我只想構建一次,然后注入任何環境檔案(暫存或生產)。現在我正在使用有 Dotenv 庫的 webpack,如果我想使用登臺或生產環境,我必須構建兩次。
那可能嗎?謝謝
uj5u.com熱心網友回復:
您已經說過這是用于服務器端代碼并??且您正在使用dotenv.
您無需為生產而重建。您至少可以采取以下幾種方法:
使用環境變數而不是
dotenv, 或使用環境變數來控制加載哪些
.env.xyz檔案dotenv,或者兩個都。
我建議#1。
1.使用環境變數(不帶dotenv)
您可以只使用環境變數而不使用dotenv. (我的大部分專案都是這樣完成的。)dotenv參考了十二要素應用指南,同時鼓勵你打破它們——通過一個.env檔案,這是一個組態檔。指南不贊成使用組態檔獲取環境資訊;從鏈接:
十二因素應用程式將配置存盤在環境變數中(通常縮寫為 env vars 或 env)。環境變數很容易在部署之間更改,而無需更改任何代碼;與組態檔不同,它們被意外簽入代碼倉庫的可能性很小......
(我并不是說十二要素應用程式指南是福音,只是在鼓勵使用組態檔的同時參考它們似乎很奇怪。)我認為你dotenv永遠不會檢查.env源代碼控制,而是創建它在每個環境的根目錄中手動進行。但這不是我看到它在野外使用的方式。
因此dotenv,您可以按照這些指南的建議進行操作:使用環境變數。您的托管平臺將提供一種方法來為您的代碼運行的環境設定環境變數。這些變數將可用process.env,無需dotenv.
這是一個簡單的例子:
index.js:
console.log(process.env.EXAMPLE);
如果您在具有EXAMPLE環境變數的環境中運行它,您將在控制臺中看到該變數的值。因此,您可以使用托管平臺的功能來設定環境變數,一切就緒。
(如果您只想在本地嘗試,可以在 *nix 上這樣做:
$ EXAMPLE=hi node index.js
hi
...或者在 Windows 上像這樣:
C:\Temp> cmd /C "set EXAMPLE=hi && node index.js"
hi
...但不要因此而產生錯誤的印象。您無需在命令列中設定環境變數,而是以托管平臺為您提供的任何方式設定它們。)
2.使用環境變數(帶dotenv)
但是,如果您想使用dotenv并擁有組態檔,則可以使用環境變數來控制加載哪些組態檔。(這就是我合作的幾個專案的完成方式。)
您可以設定一個環境變數,告訴您的代碼它在哪個環境中運行(開發、登臺、生產等),然后使用它來告訴您要加載dotenv哪個檔案。例如,用于開發和生產已經變得流行。您可以使用它來控制,告訴它用于生產,但(例如)用于開發或登臺等。.env.xyzcreate-react-appNODE_ENVNODE_ENV=DEVNODE_ENV=PRODdotenv.env.PROD.env.DEV.env.STAGING
import path from "path";
import dotenv from "dotenv";
const env = process.env.NODE_ENV ?? "DEV";
dotenv.config({
path: path.resolve(process.cwd(), `.env.${env}`),
});
3.兩者
你可以做以上的組合。如果它已經存在,則dotenv不會覆寫其中的內容(因為它是在環境中設定的)。process.env因此,您可以在.env檔案中包含資訊并使用托管平臺的環境功能覆寫它。但這似乎不必要地復雜。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/461590.html
下一篇:安裝最新版本的npm時出錯
