如何在本地Nx Monorepo的NestJS代码中设置process.env.NODE_ENV为production?
Nx Monorepo下NestJS设置NODE_ENV为production无效的解决方案
排查方向及解决步骤
1. 解决跨平台环境变量写法问题
直接写NODE_ENV=production仅适用于Linux/macOS系统,Windows系统需要用set NODE_ENV=production。要适配所有系统,先安装cross-env包:
npm install cross-env --save-dev
然后修改package.json里的serve脚本:
"serve": "cross-env NODE_ENV=production nx serve your-nestjs-project-name"
2. 检查Nx项目的target配置
打开项目根目录的project.json,找到serve和build的target配置,确保production环境的变量设置正确:
- 为serve的production配置添加env参数:
"serve": { "executor": "@nrwl/nest:serve", "configurations": { "production": { "buildTarget": "your-project:build:production", "env": { "NODE_ENV": "production" } } } }
运行时直接指定production配置:
nx serve your-nestjs-project-name --configuration=production
3. 调整代码中获取NODE_ENV的方式
不要在代码最顶部直接读取process.env.NODE_ENV,用NestJS的ConfigModule加载更可靠:
import { ConfigModule } from '@nestjs/config'; @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, envFilePath: `.env.${process.env.NODE_ENV || 'development'}`, }), ], }) export class AppModule {}
再通过ConfigService获取环境变量:
import { ConfigService } from '@nestjs/config'; constructor(private configService: ConfigService) { console.log('当前环境:', this.configService.get('NODE_ENV')); }
4. 构建后运行需单独设置环境变量
如果是构建完成后运行dist目录下的文件,运行时也要指定NODE_ENV:
cross-env NODE_ENV=production node dist/apps/your-nestjs-project-name/main.js
5. 检查nx.json的全局配置
查看nx.json里的targetDefaults,如果有全局设置的NODE_ENV,会覆盖项目级配置,需删掉或修改:
"targetDefaults": { "serve": { // 移除或修改这里的全局env配置 // "env": { // "NODE_ENV": "development" // } } }
内容的提问来源于stack exchange,提问作者nitin
相关产品推荐
相关产品推荐

