NestJS中ConfigModule无法加载动态环境配置文件问题求助
问题原因及解决方案
启动脚本空格问题
Windows下SET命令赋值时,&&前的空格会被带入变量值。你当前的启动脚本SET NODE_ENV=test && nest start --watch执行后,NODE_ENV实际值为test(末尾带空格),导致程序尝试加载不存在的.env.test文件。
修复方式:去掉等号与&&之间的空格,修改启动脚本为:"start:test": "SET NODE_ENV=test&&nest start --watch"如果需要兼容多平台(Windows/Mac/Linux),可以安装
cross-env依赖后修改为:"start:test": "cross-env NODE_ENV=test nest start --watch"Mongoose 配置加载顺序错误
你当前直接同步读取process.env.MONGODB_URI初始化Mongoose,此时ConfigModule还未完成环境变量文件的加载,process.env中不存在对应变量。需要改用异步工厂方式加载Mongoose配置,依赖ConfigService获取已加载的环境变量:MongooseModule.forRootAsync({ useFactory: (configService: ConfigService) => ({ uri: configService.get<string>('MONGODB_URI'), }), inject: [ConfigService], })同时需要给
ConfigModule添加isGlobal: true配置,避免跨模块注入问题:ConfigModule.forRoot({ isGlobal: true, envFilePath: !process.env.NODE_ENV ? '.env' : `.env.${process.env.NODE_ENV}`, })环境文件路径不匹配
Nest编译后运行的是dist目录下的JS文件,你当前使用的相对路径会以dist下的执行文件位置作为基准,大概率找不到项目根目录下的.env文件。可以用process.cwd()拼接绝对路径确保定位准确:envFilePath: !process.env.NODE_ENV ? `${process.cwd()}/.env` : `${process.cwd()}/.env.${process.env.NODE_ENV}`
内容的提问来源于stack exchange,提问作者Shashank Dubey
相关产品推荐
相关产品推荐

