Node.js中使用dotenv如何解析列表类型的环境变量?
dotenv 列表类型环境变量解析方案
dotenv 核心库默认遵循操作系统环境变量的设计规范,仅会将所有配置值解析为字符串类型,本身没有内置复杂类型(数组、对象等)的解析能力,你可以按需选择以下两种实现方案:
方案1:逗号分隔(最推荐,兼容性最高)
符合通用环境变量写法规范,不需要额外自定义逻辑,适配所有工具链:
.env 配置写法
# 列表元素用英文逗号分隔即可 FOO=a,b BAR=c
解析代码
import * as dotenv from 'dotenv' dotenv.config() // 解析为数组,空值场景下兜底为空数组 const FOO = process.env.FOO?.split(',') ?? [] for (const entry of FOO) { // 执行相关逻辑 }
方案2:自定义解析支持FOO[]数组语法
如果你想要用类似FOO[]=xxx的数组写法,可以自己加一层简单的解析逻辑,不需要引入额外依赖:
.env 配置写法
FOO[]=a FOO[]=b BAR=c
解析代码
import * as dotenv from 'dotenv' import fs from 'node:fs' // 读取并解析.env原始内容 const envRaw = fs.readFileSync('.env', 'utf8') const rawParsed = dotenv.parse(envRaw) const processedEnv = {} for (const [key, value] of Object.entries(rawParsed)) { // 识别[]结尾的数组配置 if (key.endsWith('[]')) { const realKey = key.slice(0, -2) if (!processedEnv[realKey]) processedEnv[realKey] = [] processedEnv[realKey].push(value) } else { processedEnv[key] = value } } // 合并到process.env,不会覆盖已有的系统环境变量 Object.assign(process.env, processedEnv) // 直接使用解析好的数组 for (const entry of process.env.FOO) { // 执行相关逻辑 }
补充说明
如果你坚持要用FOO=['a','b']的写法,也可以用JSON.parse解析,需要注意配置里的字符串必须用双引号包裹,避免语法报错:
# 必须用双引号,不能用单引号 FOO=["a","b"]
const FOO = JSON.parse(process.env.FOO ?? '[]')
该方案容错性较低,配置写错很容易导致解析报错,不推荐生产环境使用。
内容的提问来源于stack exchange,提问作者Charlie A
相关产品推荐
相关产品推荐

