You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么dotenv会给我的环境变量追加「#tunnel」后缀?

问题原因分析
  • 优先级冲突:dotenv 默认遵循「不覆盖已存在的环境变量」规则,如果你的Shell会话、系统配置、项目启动脚本中已经提前定义了POSTGRESQL_URL这个变量,.env文件中的赋值会直接被跳过。你看到的localhost #tunnel实际是提前存在的旧环境变量值,和你当前是否开启隧道没有关联。
  • .env文件内容异常:肉眼可见的内容不等于文件实际存储内容,有可能是编辑时误输入了隐藏字符、尾随的空格加注释内容,没有被你察觉到。
排查步骤
  1. 先在加载dotenv之前打印环境变量,确认是否提前存在值:
console.log('加载dotenv前的值:', process.env.POSTGRESQL_URL)
const dotenv = require('dotenv');
dotenv.config();
console.log('加载dotenv后的值:', process.env.POSTGRESQL_URL)

如果打印的第一个值就已经是localhost #tunnel,就能确认是已有环境变量冲突的问题。
2. 检查系统/Shell的环境变量配置:查看~/.bashrc、~/.zshrc、~/.profile等配置文件,是否有export POSTGRESQL_URL="localhost #tunnel"这类配置,注意如果值被引号包裹,#不会被识别为注释,会作为值的一部分生效。
3. 检查项目启动配置:查看package.json的scripts字段、项目启动脚本,是否有在启动命令中提前注入了该环境变量。
4. 确认.env文件实际内容:执行cat -A .env命令查看文件的原始字节内容,确认POSTGRESQL_URL=localhost后面是否有多余的尾随字符。

解决方法

如果确认是已有环境变量冲突,需要让.env文件的配置优先级更高,可以修改dotenv的加载配置,开启覆盖模式:

dotenv.config({ override: true })

内容的提问来源于stack exchange,提问作者Steve Bennett

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 03:15:09