TypeScript中无法读取.env环境变量问题求助
TypeScript中无法读取.env环境变量问题求助
Hey Hamza,我看了你遇到的问题——把.env和index.ts都放在src文件夹里,但环境变量一直返回undefined,这确实挺让人头疼的。我来帮你分析下原因,看看怎么解决~
问题根源
问题出在dotenv.config()的默认行为上:dotenv默认会去项目根目录查找.env文件,而你的.env是放在src文件夹里的,所以它找不到对应文件,自然读不到变量值啦。
解决方案
你需要在调用dotenv.config()时,明确指定.env文件的路径。可以借助Node.js的path模块动态获取正确路径,这样不管项目结构怎么变化(比如编译后),路径都不会出错。
修改后的代码示例:
import dotenv from 'dotenv'; import path from 'path'; // 新增导入path模块 import express from "express"; import { dbconnection } from './DB/Connection.js'; import morgan from 'morgan'; import MainRouter from './Routes/MainRouter.js'; import cookieParser from 'cookie-parser'; // 配置dotenv,指定src文件夹下的.env路径 dotenv.config({ path: path.resolve(__dirname, '.env') }); const port = process.env.PORT || 3000; const App = express(); // 后续代码保持不变...
额外检查点
除了路径问题,你也可以排查下这几个点:
- 确认.env文件格式正确:变量名和值之间不要加空格,比如
MONGODB_URL=mongodb://localhost:27017/yourDB,不要写成MONGODB_URL = xxx或给值加不必要的引号(除非值里有特殊字符)。 - 确认已正确安装dotenv:如果之前没安装,运行
npm install dotenv或yarn add dotenv。 - 若用ts-node/ts-node-dev运行,检查tsconfig.json的
compilerOptions:确保module设为CommonJS,或启用了esModuleInterop(你用ES模块导入的话,这一步大概率没问题,但可以确认下)。
这样调整后,应该就能正确读取到src文件夹里的.env变量了,你可以试试看~
备注:内容来源于stack exchange,提问作者Hamza Hussain
相关产品推荐
相关产品推荐

