.env 文件
Prisma ORM 在你的项目根目录下创建一个默认的 .env
文件。你可以选择替换这个文件,或者在 prisma
文件夹中创建一个新的文件,如果你选择重定位你的 prisma.schema
文件,也可以将它放在 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
文档,了解有关 如果在两个地方定义了环境变量会发生什么 的信息。
展开变量
存储在 .env
文件中的变量可以使用 dotenv-expand 指定的格式进行展开。
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)