跳到主要内容

.env 文件

Prisma ORM 在你的项目根目录创建一个默认的 .env 文件。你可以选择替换此文件或在 prisma 文件夹中创建一个新文件,或者如果你选择重新定位你的 prisma.schema 文件,就在该文件旁边。

.env 文件位置

Prisma CLI 按顺序查找以下位置的 .env 文件

  1. 在项目的根文件夹中 (./.env)
  2. 来自由 --schema 参数指定的模式所在的同一个文件夹
  3. 来自 package.json"prisma": {"schema": "/path/to/schema.prisma"} 中的模式所在的同一个文件夹
  4. 来自 ./prisma 文件夹

如果 .env 文件位于步骤 1. 中,但额外的冲突 .env 变量位于步骤 2. - 4. 中,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 文件

命令模式位置按顺序检查的 .env 文件位置
prisma [command]./prisma/schema.prisma./.env
./prisma/.env
prisma [command] --schema=./a/b/schema.prisma./a/b/schema.prisma./.env
./a/b/.env
./prisma/.env
prisma [command]"prisma": {"schema": "/path/to/schema.prisma"}.env
./path/to/schema/.env
./prisma/.env
prisma [command]没有模式(例如,在空目录中运行 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

这将使具有 postgresql://test:test@localhost:5432/test?schema=public 值的环境变量 DATABASE_URL_WITH_SCHEMA 可用于 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

这将使具有 postgresql://test:test@localhost:5432/test?schema=foo 值的环境变量 DATABASE_URL_WITH_SCHEMA 可用于 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。