使用多个 .env 文件
如果你在一个 .env
文件中存储了不同环境的连接 URL,则有可能删除你的生产数据库。
一个解决方案是拥有多个 .env
文件,每个文件代表不同的环境。在实践中,这意味着你为每个环境创建一个文件
.env.development
.env.sample
上面列表中省略了 .env.production
,因为不建议将你的生产凭据存储在本地,即使它们被 git 忽略。
然后使用像 dotenv-cli
这样的包,你可以加载你正在使用的环境的正确连接 URL。
设置多个 .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"
},