如何在 Prisma 中使用多个 .env 文件?

Eri*_*ika 6 javascript node.js nestjs prisma dotenv

我正在使用 Prisma 开发一个 Nestjs 项目,并且我想在 Prisma 中使用多个 .env 文件。我按照这里的指南进行操作。根据指南,我添加:

"migratetest:mysql": "dotenv -e .env.test -- npx prisma migrate dev",
"migratedev:mysql": "dotenv -e .env.development -- npx prisma migrate dev"
Run Code Online (Sandbox Code Playgroud)

到我的 package.json。我运行migratetest:mysql加载 .env.test 文件并进行迁移。然后,我运行start: dev启动该应用程序。然而,棱镜说:

Error: error: Environment variable not found: DATABASE_URL.
  -->  schema.prisma:10
   | 
 9 |   provider = "mysql"
10 |    url      = env("DATABASE_URL")
   | 
Run Code Online (Sandbox Code Playgroud)

似乎在我的项目中找不到 .env 文件(根据指南,没有 .env 文件,应该更改为 .env.test 和 .env.development)

这是我的 .env.test:

DATABASE_URL=mysql://root:123456@localhost:3306/test
Run Code Online (Sandbox Code Playgroud)

这是我的.env.development:

DATABASE_URL=mysql://root:123456@localhost:3306/dev
Run Code Online (Sandbox Code Playgroud)

请帮忙 :)

Jak*_*lak 9

您需要告诉每个脚本您必须使用 dotenv cli,因此您的脚本start:dev应该如下所示:

"start:dev": "dotenv -e .env.development nest start --watch",
Run Code Online (Sandbox Code Playgroud)

然而,对我来说,它不是在监视模式下开始编译,我仍在尝试调试它。有任何想法吗?

编辑:我发布了此内容,2 分钟后我就能够解决我的问题 :D 脚本的最终版本应如下所示:

"start:dev": "dotenv -e .env.development -- nest start --watch",
Run Code Online (Sandbox Code Playgroud)

Prisma 文档中解释了需要两个破折号的原因:

注意:默认情况下,dotenv 不会将标志传递给 Prisma 命令,这就是为什么该命令在 prisma 之前包含两个破折号,从而可以使用 --force、--schema 或 --preview-feature 等标志。