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

NestJS中process.env环境变量仅src目录生效其余位置返回undefined

问题原因

  • .env文件命名与路径错误:你当前的环境变量文件命名为.env.env,且未放置在项目根目录(package.json同级目录)下。@nestjs/config默认会从执行启动命令的工作目录(即项目根目录)加载名为.env的文件,文件名错误、路径不匹配都会导致加载失败。
  • 配置读取时机早于环境变量初始化:NestJS的环境变量是在ConfigModule完成实例化后才会挂载到process.env上的。如果你的mailer.config.ts在顶层作用域直接读取process.env,且该文件在ConfigModule注册前就被导入执行,此时环境变量还未完成赋值,自然返回undefined。而main.ts中的app.listen是在所有模块初始化完成后才执行,此时环境变量已经加载完毕,所以可以正常读取PORT值。
  • 编译后路径不匹配:如果configs目录未被纳入TypeScript编译配置的包含路径,编译后dist目录的文件结构与开发目录不一致,也会导致相对路径读取.env文件失败。

解决方案

  1. 修正.env文件配置
    将你现有的login-jwt.env.env文件移动到项目根目录(和package.json同目录),重命名为.env,确保文件名没有多余后缀。

  2. 显式配置ConfigModule全局生效
    在AppModule中注册ConfigModule时,显式指定.env文件路径并开启全局生效,避免重复导入:

// src/app.module.ts
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';

@Module({
  imports: [
    ConfigModule.forRoot({
      envFilePath: '.env',
      isGlobal: true, // 全局生效,所有模块都可以直接读取环境变量
    }),
    // 其余业务模块导入
  ],
})
export class AppModule {}
  1. 调整配置文件读取逻辑
    不要在mailer.config.ts的顶层作用域直接读取process.env,改成工厂函数的形式,确保ConfigModule加载完成后再动态读取:
// configs/mailer.config.ts
import { registerAs } from '@nestjs/config';

export default registerAs('mailer', () => ({
  host: process.env.MAILHOST,
  service: process.env.MAILSERVICE,
  user: process.env.MAILUSER,
  pass: process.env.PASSWORD,
}));

如果是给@nestjs-modules/mailer做配置,使用异步工厂的方式注入即可:

// src/app.module.ts 中注册MailerModule示例
MailerModule.forRootAsync({
  useFactory: () => ({
    transport: {
      host: process.env.MAILHOST,
      service: process.env.MAILSERVICE,
      auth: {
        user: process.env.MAILUSER,
        pass: process.env.PASSWORD,
      },
    },
  }),
});
  1. 校验TypeScript编译配置
    打开项目根目录的tsconfig.json,检查include字段是否包含configs目录的文件,避免编译后配置文件丢失:
{
  "include": ["src/**/*", "configs/**/*"]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:24:03