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

TypeScript与Node.js环境变量失效问题求助

解决process.env.DB_NAME返回undefined的问题

看起来你遇到了环境变量无法被Node.js进程正确读取的问题,我来帮你一步步排查解决:

1. 确保dotenv在代码最顶部加载

dotenv需要在任何依赖环境变量的代码之前执行,否则那些代码会读取到undefined。修改你的index.ts,把dotenv的导入和配置放在最开头:

import dotenv from 'dotenv';
dotenv.config(); // 这行必须在其他导入之前

import { MikroORM } from '@mikro-orm/core';
import { __prod__ } from './constants';
import { Post } from './entities/Post';
import microConfig from './mikro-orm.config';

console.log(`console log is : ${process.env.DB_NAME}`);
// ... 后续代码

2. 检查.env文件的格式和位置

  • 确保你的环境变量文件命名为.env,并且放在项目根目录(和package.json同级)。
  • 文件内的变量格式要正确,等号两边不能有空格:
    # 正确写法
    DB_NAME=hello
    
    # 错误写法(会导致读取失败)
    DB_NAME = hello
    
  • 如果你的.env文件不在根目录,需要在dotenv.config里指定路径:
    dotenv.config({ path: './src/.env' }); // 根据实际路径调整
    

3. 修改package.json的dev脚本,直接运行TS文件

你当前的dev脚本是运行编译后的dist/index.js,但如果编译过程中没有正确处理dotenv的依赖,或者你希望实时看到TS代码的变化,建议改用ts-node直接运行TS文件:
修改package.json里的scripts:

"scripts": {
  "start": "node dist/index.js",
  "dev": "nodemon --exec ts-node src/index.ts", // 改为这行
  "build": "tsc", // 新增编译脚本
  "test": "echo \"Error: no test specified\" && exit 1"
},

这样nodemon会直接用ts-node运行你的TS源码,避免编译后可能出现的环境变量加载问题。

4. 检查mikro-orm.config.ts是否也需要加载dotenv

如果你的mikro-orm.config.ts里也用到了process.env.DB_NAME,那同样需要在该文件顶部加载dotenv,或者确保index.ts里的dotenv加载在导入mikro-orm.config之前(我们第一步已经做了这个)。

5. 验证环境变量是否真的被加载

可以在dotenv.config之后打印所有环境变量,确认是否包含DB_NAME:

dotenv.config();
console.log('所有环境变量:', process.env); // 查看输出里有没有DB_NAME

如果以上步骤都试过还是不行,可以尝试手动在命令行传递环境变量测试:

DB_NAME=hello npm run dev

如果这样能正常输出,那说明问题还是出在dotenv的加载上,再回头检查.env文件的路径和格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:26:47