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
相关产品推荐
相关产品推荐

