如何使dotenv解析的process.env.MyEnvVar支持多行格式?
解决dotenv读取多行环境变量时转义字符未解析的问题
这个问题的核心在于终端shell和dotenv对转义字符的处理逻辑不同,咱们分两种场景来解决:
场景1:直接在终端export环境变量
如果你是在Mac终端(bash/zsh)里直接设置环境变量,普通双引号里的\n不会被shell解析为实际换行,只会被当作普通的两个字符(\和n)传递给Node.js。
要让shell把\n解析成真实的换行,需要用shell的ANSI-C引号语法($'...'):
export MyEnvVar=$'new\nline'
这样设置后,再运行你的Node.js代码,process.env.MyEnvVar就会输出带换行的内容了。
场景2:使用.env文件(推荐,更易维护)
dotenv官方文档里提到的多行变量支持,是针对.env文件的。你需要把变量值用双引号包裹,dotenv会自动解析里面的转义字符(包括\n)。
写法1:直接换行
在.env文件里这样写:
MyEnvVar="new line"
写法2:使用\n转义
也可以用\n来表示换行,同样用双引号包裹:
MyEnvVar="new\nline"
两种写法都能让dotenv正确解析为多行字符串,运行你的Node.js代码就能得到和console.log("new\nline")一样的输出。
验证代码
不管用哪种方式设置,运行你的代码:
require("dotenv").config(); console.log("new\nline"); console.log(""); console.log(""); console.log(process.env.MyEnvVar);
都会得到一致的换行输出:
new line new line
内容的提问来源于stack exchange,提问作者Jamil




