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

JavaScript ES6 import语法下dotenv配置失效,如何正确配置?

解决ES6模块下dotenv无法读取环境变量的问题

核心问题:路径解析逻辑变化

ES模块中没有CommonJS的__dirname/__filename变量,而dotenv的config({ path })参数默认基于**当前工作目录(process.cwd())**解析,而非模块文件所在目录——这正是切换语法后失效的关键原因,之前require的相对路径逻辑不再适用。

解决方案:使用绝对路径指定env文件

通过import.meta.url获取当前模块的绝对路径,拼接env文件路径,彻底避免工作目录变化带来的路径问题。

场景1:config.env放在server/db目录下(你的目标结构)

修改server/db/conn.js代码:

import * as dotenv from 'dotenv';
import path from 'path';
import { fileURLToPath } from 'url';

// 模拟CommonJS的__dirname/__filename
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

// 拼接config.env的绝对路径(与conn.js同目录)
dotenv.config({ path: path.join(__dirname, 'config.env') });

// 测试是否读取成功
console.log(process.env.MONGODB_URI); // 替换为你的环境变量名

场景2:config.env放在server根目录下

只需调整路径拼接部分:

dotenv.config({ path: path.join(__dirname, '../config.env') });

额外检查项

  • 确认package.json中已添加"type": "module",这是启用ES模块的必要配置:
    {
      "type": "module"
    }
    
  • 检查环境变量名拼写是否正确(比如报错中uri对应的变量是否确实存在于config.env中)
  • 更新dotenv到最新版本,避免旧版本的ES模块兼容问题:
    npm install dotenv@latest
    
  • 确保运行脚本时,没有通过NODE_ENV等变量覆盖dotenv的加载逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 12:27:16