跳至主要內容

使用多個 .env 檔案

如果您在單個 .env 檔案中儲存不同環境的連線網址,您的生產資料庫可能會有被刪除的風險。

一種解決方案是使用多個 .env 檔案,每個檔案代表不同的環境。實際上,這表示您為每個環境建立一個檔案

  • .env.development
  • .env.sample
警告

上述清單中省略了 .env.production,因為不建議將您的生產憑證儲存在本地,即使它們被 git 忽略了。

然後使用像 dotenv-cli 這樣的套件,您可以為您正在工作的環境載入正確的連線網址。

了解 Prisma 的預設 .env 行為

依預設,Prisma 會自動從位於您專案根目錄的 .env 檔案載入環境變數。當使用像 dotenv-cli 這樣的工具來指定不同的 .env 檔案(例如,.env.test)時,Prisma 的行為如下

  • 主要變數:它僅在環境中尚未設定變數時,才使用指定檔案中的變數(dotenv -e .env.test)。
  • 後備變數:對於未包含在指定檔案中的變數,Prisma 將從 .env 載入它們。

這表示 .env 作為後備。因此,如果 .env 包含不適用於當前環境的值,它們仍然可能會在無意中被載入。

設定多個 .env 檔案

為了本指南的目的,假設您在開發應用程式時使用專用的開發資料庫。

  1. 將您的 .env 檔案重新命名為 .env.development
.env.development
DATABASE_URL="postgresql://prisma:prisma@localhost:5433/dev"
  1. 建立一個新的 .env.sample 檔案,並將資料庫名稱變更為 sample (或您偏好的名稱)
.env.sample
DATABASE_URL="postgresql://prisma:prisma@localhost:5433/sample"
  1. 安裝 dotenv-cli

為了讓 Prisma ORM 和 Jest 知道要使用哪個 .env 檔案,請修改您的 package.json 指令碼,以包含並呼叫 dotenv 套件,並根據您正在執行的指令以及您想要它們在哪個環境中執行來指定要使用的檔案。

資訊

任何正在執行測試和遷移的頂級指令碼都需要在它之前使用 dotenv 指令。這可以確保來自 .env.sample 的 env 變數會傳遞給所有指令,包括 Jest。

在不同環境中執行遷移

您可以使用 dotenv-cli 套件,以指定 Prisma ORM 在執行遷移時應該使用哪個環境檔案。

以下指令碼使用 dotenv-cli.env.sample 環境檔案(其中包含 DATABASE_URL 連線字串)傳遞給 Prisma ORM 遷移指令碼。

遷移指令碼

package.json
  "scripts": {
"migrate:postgres": "dotenv -e .env.sample -- npx prisma migrate deploy",
},

在不同環境中執行測試

在執行測試時,我們建議您模擬 Prisma Client。這樣做時,您需要告訴 Jest 在執行測試時應該使用哪個環境。

依預設,Prisma Client 將使用位於專案根目錄的預設 .env 檔案中指定的環境。

如果您已建立單獨的 .env.sample 檔案來指定您的測試資料庫,則需要將此環境傳遞給 Jest。

以下指令碼使用 dotenv-cli.env.sample 環境檔案(其中包含 DATABASE_URL 連線字串)傳遞給 Jest。

測試指令碼

package.json
  "scripts": {
"test": "dotenv -e .env.sample -- jest -i"
},