Node.js项目从外层目录启动时无法读取.env文件配置值是什么原因
核心原因
dotenv包的默认查找逻辑是:调用config()方法时如果不手动指定.env文件路径,会从**Node进程的当前工作目录(CWD,即你启动服务时所在的执行目录)**查找.env文件,不会自动识别当前JS脚本所在的目录。
对应你的场景:
- 你在VS Code中打开
Backend目录时,启动后端服务的工作目录就是.env所在的Backend目录,dotenv能正常读取到文件内容,给process.env注入对应变量 - 你在VS Code中打开
iNotebook根目录时,启动后端服务的工作目录变成了iNotebook根目录,dotenv会在根目录下找.env,但你的.env存在子目录里,读取失败,自然JWT_SECRET就是undefined
修复方案
最简单的方法是给dotenv指定绝对路径,用Node内置的__dirname变量定位当前config.js所在的目录,不管你从哪个目录启动服务都能精准找到.env,修改config.js代码如下:
require('dotenv').config({ path: `${__dirname}/.env` }); module.exports = {JWT_SECRET:process.env.JWT_SECRET};
也可以在启动服务时先切换工作目录到Backend再执行启动命令,比如根目录下执行:cd Backend && node 你的启动入口文件.js
内容的提问来源于stack exchange,提问作者Twinkle
相关产品推荐
相关产品推荐

