Node TypeScript项目中dotenv的path配置不符合预期的原因
dotenv 路径配置异常原因解析
问题背景
项目文件结构:
My_Project/ ├── package.json ├── tsconfig.json ├── dev.env ├── src/ │ ├── server.ts │ └── app.ts ├── node_modules/ └── dist/
在src/server.ts中配置dotenv读取环境变量:
import { config } from "dotenv"; config({ path: "../dev.env", });
尝试通过process.env.*访问环境变量时返回undefined,但将path改为./dev.env却能正常读取。按文件层级关系,path似乎应该设为../dev.env,为什么会出现这种情况?
核心原因
dotenv的path参数是基于Node.js进程的当前工作目录(CWD),而不是代码文件所在的目录:
- 启动项目时,你通常是在项目根目录(
My_Project/)下执行命令(比如ts-node src/server.ts或npm run dev),此时当前工作目录就是根目录。 - 使用
./dev.env时,路径指向当前工作目录下的dev.env,也就是项目根目录里的目标文件,因此能正确读取。 - 使用
../dev.env时,会尝试去当前工作目录的上级目录查找文件,自然找不到,导致环境变量加载失败,返回undefined。
可靠解决方案
如果希望路径不受当前工作目录影响,可通过__dirname(当前文件所在目录的绝对路径)拼接目标文件路径:
import { config } from "dotenv"; import path from "path"; config({ path: path.join(__dirname, "../dev.env"), });
这样无论在哪个目录启动项目,都能精准定位到dev.env文件。
内容的提问来源于stack exchange,提问作者yolin00
相关产品推荐
相关产品推荐

