使用多个 .env 文件
如果您在单个 .env
文件中存储指向每个环境的不同连接 URL,则存在删除生产数据库的风险。
一种解决方案是拥有多个 .env
文件,每个文件代表不同的环境。 在实践中,这意味着您为每个环境创建一个文件
.env.development
.env.sample
.env.production
从上面的列表中省略,因为不建议在本地存储您的生产凭据,即使它们被 git 忽略。
然后,使用像 dotenv-cli
这样的包,您可以为正在工作的环境加载正确的连接 URL。
了解 Prisma 的默认 .env 行为
默认情况下,Prisma 会自动从项目根目录下的 .env 文件加载环境变量。 当使用像 dotenv-cli 这样的工具来指定不同的 .env 文件(例如,.env.test)时,Prisma 的行为如下
- 主要变量:它仅当变量尚未在环境中设置时才使用指定文件(dotenv -e .env.test)中的变量。
- 回退变量:对于指定文件中未包含的变量,Prisma 将从 .env 加载它们。
这意味着 .env 充当回退。 因此,如果 .env 包含不适用于当前环境的值,它们仍可能被意外加载。
设置多个 .env
文件
在本指南中,我们假设您有一个专用的开发数据库,在开发应用程序时使用。
- 将您的
.env
文件重命名为.env.development
DATABASE_URL="postgresql://prisma:prisma@localhost:5433/dev"
- 创建一个新的
.env.sample
文件,并将数据库名称更改为sample
(或您喜欢的名称)
DATABASE_URL="postgresql://prisma:prisma@localhost:5433/sample"
- 安装
dotenv-cli
为了让 Prisma ORM 和 Jest 知道要使用哪个 .env
文件,请更改您的 package.json
脚本以包含并调用 dotenv
包,并根据您正在运行的命令以及您希望它们在哪个环境中运行来指定要使用的文件。
任何运行测试和迁移的顶级脚本都需要在它之前使用 dotenv
命令。 这确保了来自 .env.sample
的环境变量被传递给包括 Jest 在内的所有命令。
在不同环境上运行迁移
您可以使用 dotenv-cli
包来指定运行迁移时 Prisma ORM 应使用哪个环境文件。
以下脚本使用 dotenv-cli
将 .env.sample
环境变量文件(其中包含 DATABASE_URL
连接字符串)传递给 Prisma ORM 迁移脚本。
迁移脚本
"scripts": {
"migrate:postgres": "dotenv -e .env.sample -- npx prisma migrate deploy",
},
在不同环境上运行测试
在运行测试时,我们建议您 模拟 Prisma 客户端。 在这样做时,您需要告诉 Jest 在运行其测试时应使用哪个环境。
默认情况下,Prisma 客户端将使用位于项目根目录的默认 .env
文件中指定的环境。
如果您创建了一个单独的 .env.sample
文件来指定您的测试数据库,那么此环境将需要传递给 Jest。
以下脚本使用 dotenv-cli
将 .env.sample
环境变量文件(其中包含 DATABASE_URL
连接字符串)传递给 Jest。
测试脚本
"scripts": {
"test": "dotenv -e .env.sample -- jest -i"
},