跳至主要內容

.env 檔案

Prisma ORM 在你的專案根目錄建立一個預設的 .env 檔案。你可以選擇取代此檔案,或是在 prisma 資料夾中建立一個新的檔案,或者,如果你選擇重新定位你的 prisma.schema 檔案,則與其放在一起。

.env 檔案位置

Prisma CLI 依序在以下位置尋找 .env 檔案

  1. 在你的專案根目錄資料夾中 (./.env)
  2. --schema 引數指定的 schema 相同的資料夾中
  3. 與從 package.json 中的 "prisma": {"schema": "/path/to/schema.prisma"} 取得的 schema 相同的資料夾中
  4. ./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 檔案中的變數。

.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
.env
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

.env
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)