Prisma中的环境变量
在开发过程中我们经常遇到环境变量的问题,本文提供了一个 Prisma
从不同 .env
文件中读取数据库 URL
的方案。
遇到问题
Next支持.env
、.env.development
、.env.production
、.env.local
这样的环境变量,可以在生产和开发环境中使用不同的环境变量。但是如果我使用prisma
管理数据库,就会遇到prisma
的指令无法正确根据我当前的环境读取不同的数据库URL的情况。
相关知识
Next的环境变量
以下内容来自:环境变量 | Next.js 中文文档
.env
:默认环境(所有环境都生效,最低优先级).env.development
:生产环境(next dev
时生效).env.production
:开发环境(next start
时生效).env.local
:本地环境(所有环境都生效,最高优先级)- 优先级:
.env
>.env.development
/.env.production
>.env.local
dotenv
dotenv
是一个 Node.js
库,用于从 .env
文件中加载环境变量到 process.env
中。
在 Prisma
中,命令行默认从.env
文件中读取文件,如果要指定其他的环境变量文件,就需要用到它的命令行工具 dotenv-cli
。
安装:yarn add dotenv-cli -D
语法:dotenv -e 环境变量文件 -- 后续命令
例如:dotenv -e .env.development -- prisma db push
NODE_ENV
NODE_ENV
是 Node.js
应用中一个及其重要的环境变量,可以标识当前的运行环境(开发、生产、测试),我们可以在页面里使用它来实现开发环境自动填写测试用密码、跳过某些权限校验之类。
下面这个文件,可以实现在使用node 文件
时直接指定环境,而不用单独配置。
executor.js
1 | const { spawn } = require("child_process") |
用法:node executor.js --env=production --file=./e.js
解决方案
分别在.env.development
和.env.production
中写数据库的连接 URL ,然后在package.json
中写对应脚本来执行数据操作。
1 | "scripts": { |
Prisma中的环境变量