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

NX Nest项目:如何从dist目录正确访问环境变量

NX Nest项目ConfigModule读取.env返回undefined的解决方法

1. 配置NX将.env文件同步到dist目录

NX默认不会把.env文件复制到编译后的dist目录,先修改应用的project.json,在build的assets里添加.env文件的匹配规则,确保编译时同步到对应路径:

{
  "targets": {
    "build": {
      "executor": "@nx/nest:build",
      "options": {
        "outputPath": "dist/apps/your-app",
        "main": "apps/your-app/src/main.ts",
        "tsConfig": "apps/your-app/tsconfig.app.json",
        "assets": [
          "apps/your-app/src/*.env*", // 匹配src下所有.env前缀的文件
          "apps/your-app/src/assets"
        ]
      }
    }
  }
}

2. 动态计算.env文件路径

在app.module.ts里用Node的path模块结合__dirname动态生成路径,不管是开发环境还是编译后的生产环境,都能正确定位到src目录下的.env文件:

import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import * as path from 'path';

@Module({
  imports: [
    ConfigModule.forRoot({
      envFilePath: path.join(
        __dirname,
        `.env.${process.env.NODE_ENV || 'development'}`
      ),
      isGlobal: true, // 可选,全局注册ConfigModule,避免重复导入
      ignoreEnvFile: false,
    }),
    // 其他业务模块
  ],
})
export class AppModule {}

__dirname在开发时指向apps/your-app/src,编译后指向dist/apps/your-app/src,相对路径./.env.xxx会自动匹配到对应目录下的环境文件。

3. 确保NODE_ENV正确设置

在启动脚本里明确设置NODE_ENV,让ConfigModule加载对应环境的.env文件,比如package.json的scripts:

{
  "scripts": {
    "start:dev": "NODE_ENV=development nx serve your-app",
    "start:prod": "NODE_ENV=production nx run your-app:serve:production"
  }
}

4. 校验.env文件内容

确认你的.env.development/.env.production文件里存在正确的MONGO_URI配置:

MONGO_URI=mongodb://localhost:27017/your-database

这样调整后,configService.get<string>('MONGO_URI')就能正常读取到环境变量值,完全符合你要求的从src目录相对路径访问、不依赖dist到src的硬编码路径、不把配置写在.ts文件里的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 05:47:33