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

Ubuntu环境下Yarn+Mocha中dotenv无法加载环境变量求助

解决dotenv在yarn test/start时无法加载环境变量的问题

我之前也碰到过类似的dotenv加载失效的问题,结合你给出的信息,给你几个针对性的排查和解决方向,应该能帮你搞定:

1. 确认.env文件的位置与加载路径

默认情况下dotenv.config()会加载项目根目录下的.env文件,如果你的.env文件不在根目录,需要手动指定路径:

require('dotenv').config({ path: './path/to/your/.env' });

你还可以在配置后添加日志验证是否加载成功,快速定位是文件找不到还是解析问题:

const result = require('dotenv').config();
if (result.error) {
  throw result.error;
}
console.log('已加载的环境变量:', result.parsed);

2. 检查package.json的脚本配置

有时候yarn的执行环境需要显式触发dotenv加载,避免代码执行顺序问题:

  • 如果是直接用node启动项目,可以修改start脚本:
    "scripts": {
      "start": "node -r dotenv/config App.js"
    }
    
  • 如果用Jest做测试,需要在jest.config.js中配置前置加载:
    module.exports = {
      setupFiles: ['dotenv/config'],
    };
    
    这样Jest会在运行所有测试代码前先加载dotenv,避免测试消费端代码先于环境变量初始化。

3. 排查dotenv版本与依赖冲突

不同版本的dotenv可能存在兼容性问题(比如旧版本对ES模块的支持有限),可以尝试锁定一个稳定版本:

yarn add dotenv@16.0.3

同时检查是否有其他依赖(比如某些CLI工具、测试框架)会覆盖process.env,可以暂时禁用无关依赖来排查冲突。

4. 验证.env文件的语法与编码

确保.env文件的格式完全符合要求:

  • 正确格式为KEY=VALUE,不要在等号两边加空格,值不需要额外引号(除非值包含空格,此时用双引号包裹):
    LOG_LEVEL=testlevel
    APP_NAME=testapp
    
  • 确保文件编码为UTF-8,部分编辑器默认的编码可能导致dotenv无法解析内容。

5. 确认执行脚本的工作目录

有时候yarn执行脚本的工作目录并非项目根目录,导致dotenv找不到.env文件。可以在入口文件最顶部添加日志验证:

console.log('当前工作目录:', process.cwd());

如果输出不是项目根目录,要么调整脚本的工作目录,要么给dotenv指定绝对路径。

如果以上方法都无效,还可以尝试把dotenv加载逻辑抽成单独的loadEnv.js文件,然后在入口文件的最顶部优先引入这个文件,确保没有任何代码(包括ESM的import语句)先于它执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:39:38