.env 檔案
Prisma ORM 在你的專案根目錄建立一個預設的 .env
檔案。你可以選擇取代此檔案,或是在 prisma
資料夾中建立一個新的檔案,或者,如果你選擇重新定位你的 prisma.schema
檔案,則與其放在一起。
.env
檔案位置
Prisma CLI 依序在以下位置尋找 .env
檔案
- 在你的專案根目錄資料夾中 (
./.env
) - 與
--schema
引數指定的 schema 相同的資料夾中 - 與從
package.json
中的"prisma": {"schema": "/path/to/schema.prisma"}
取得的 schema 相同的資料夾中 - 從
./prisma
資料夾中
如果在步驟 1. 中找到 .env
檔案,但在步驟 2. - 4. 中找到其他衝突的 .env
變數,CLI 將會拋出錯誤。例如,如果你在兩個不同的 .env
檔案中指定 DATABASE_URL
變數,你會收到以下錯誤
Error: There is a conflict between env vars in .env and prisma/.env
Conflicting env vars:
DATABASE_URL
We suggest to move the contents of prisma/.env to .env to consolidate your env vars.
下表說明 Prisma CLI 在哪裡尋找 .env
檔案
命令 | schema 位置 | 檢查的 .env 檔案位置,依序 |
---|---|---|
prisma [命令] | ./prisma/schema.prisma | ./.env ./prisma/.env |
prisma [命令] --schema=./a/b/schema.prisma | ./a/b/schema.prisma | ./.env ./a/b/.env ./prisma/.env |
prisma [命令] | "prisma": {"schema": "/path/to/schema.prisma"} | .env ./path/to/schema/.env ./prisma/.env |
prisma [命令] | 沒有 schema (例如,在空目錄中執行 prisma db pull 時) | ./.env ./prisma/.env |
當執行 Prisma CLI 命令時,在該 .env
檔案中定義的任何環境變數都會自動載入。
不要將你的 .env
檔案提交到版本控制!
請參閱 dotenv
文件,以了解如果在兩個地方定義了環境變數會發生什麼事。
擴展變數
使用 dotenv-expand 指定的格式,可以擴展儲存在 .env
檔案中的變數。
DATABASE_URL=postgresql://test:test@localhost:5432/test
DATABASE_URL_WITH_SCHEMA=${DATABASE_URL}?schema=public
這將使環境變數 DATABASE_URL_WITH_SCHEMA
的值為 postgresql://test:test@localhost:5432/test?schema=public
,可供 Prisma ORM 使用。
你也可以在擴展中使用在 .env
檔案外部設定的環境變數,例如在 Heroku 或類似的 PaaS 上設定的資料庫 URL
# environment variable already set in the environment of the system
export DATABASE_URL=postgresql://test:test@localhost:5432/test
DATABASE_URL_WITH_SCHEMA=${DATABASE_URL}?schema=foo
這將使環境變數 DATABASE_URL_WITH_SCHEMA
的值為 postgresql://test:test@localhost:5432/test?schema=foo
,可供 Prisma ORM 使用。
範例:在 .env
檔案中設定 DATABASE_URL
環境變數
從環境變數載入資料庫連線 URL 是很常見的做法
// schema.prisma
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
你可以在 .env
檔案中設定 DATABASE_URL
DATABASE_URL=postgresql://test:test@localhost:5432/test?schema=public
當你執行需要存取透過 datasource
區塊定義的資料庫的命令時(例如,prisma db pull
),Prisma CLI 會自動從 .env
檔案載入 DATABASE_URL
環境變數,並使其可供 CLI 使用。
在你的程式碼中使用環境變數
如果你希望在執行時評估環境變數,你需要在你的應用程式碼中手動載入它們(例如,使用 dotenv
)
import * as dotenv from 'dotenv'
dotenv.config() // Load the environment variables
console.log(`The connection URL is ${process.env.DATABASE_URL}`)
如果你為你的環境變數使用自訂的檔案名稱,你可以配置 dotenv
以使用該檔案名稱
import * as dotenv from 'dotenv'
var envFile = path.resolve(join(__dirname, "myenv.env"))
dotenv.config({path: envFile}) // Load the environment variables
console.log(`The connection URL is ${process.env.DATABASE_URL}`)
如果你需要跨環境檔案的變數擴展,你可以另外使用 dotenv-expand
import * as dotenv from 'dotenv'
const dotenvExpand = require('dotenv-expand')
var envFile = path.resolve(join(__dirname, "myenv.env"))
var mySqlEnv = dotenv.config({path: envFile})
dotenvExpand.expand(mySqlEnv)