能否通过dotenv包与Heroku平台用两个.env变量生成第三个变量?
在.env文件和Heroku中实现环境变量拼接的方案
一、Node.js dotenv 环境下的实现
dotenv核心包本身不支持.env文件内的变量插值,但可以借助官方扩展dotenv-expand实现你要的语法:
- 先安装依赖:
npm install dotenv dotenv-expand - 在项目入口文件中加载配置(支持CommonJS和ES模块两种写法):
// CommonJS require('dotenv-expand')(require('dotenv').config()) // ES模块 import dotenv from 'dotenv' import dotenvExpand from 'dotenv-expand' const envConfig = dotenv.config() dotenvExpand.expand(envConfig) - 之后你的.env文件就可以直接用变量拼接语法:
db_url = my_db_url db_schema = my_schema db_url_w_schema = $db_url?schema=$db_schema
二、Heroku平台的实现
Heroku原生支持配置变量的插值,无需额外工具,直接用$VAR或${VAR}语法即可:
- 通过CLI设置:
注意:如果变量值包含heroku config:set DB_URL_W_SCHEMA="$DB_URL?schema=$DB_SCHEMA"&、空格等特殊字符,必须用双引号包裹整个值,避免解析错误。 - 通过Heroku控制台设置:
进入应用的「Settings」→「Config Vars」页面,添加键DB_URL_W_SCHEMA,值填写$DB_URL?schema=$DB_SCHEMA,Heroku会在应用运行时自动完成变量替换。
补充说明
这样设置后,Prisma可以直接在schema.prisma中使用DATABASE_URL = env("DB_URL_W_SCHEMA"),避开代码层面拼接带来的bug;后续凭证轮换时,只需更新db_url或db_schema变量,无需手动修改拼接后的目标变量。
内容的提问来源于stack exchange,提问作者GABRIEL R GARCIA-AVILES
相关产品推荐
相关产品推荐

