如何在Nx Workspace的Express项目中获取环境配置
方法一:使用NX自带的Environment文件导入
NX的environment.ts/environment.prod.ts是编译时静态替换的配置文件,不能通过process.env直接访问,需要通过模块导入的方式使用:
确保环境文件结构正确:
src/environments/environment.ts(开发环境):export const environment = { production: false, MONGO_URL: 'mongodb://localhost:27017/dev-db' };src/environments/environment.prod.ts(生产环境):export const environment = { production: true, MONGO_URL: 'mongodb://prod-host:27017/prod-db' };在代码中导入并使用:
直接导入对应路径,或者利用NX的路径映射(通常在tsconfig.base.json中配置了@your-workspace-name/environments,替换成你的工作区名称即可):import { environment } from '@your-workspace-name/environments'; // 直接访问MONGO_URL console.log(environment.MONGO_URL);执行
nx build --configuration=production时,NX会自动替换为environment.prod.ts的内容,开发环境默认使用environment.ts。
方法二:使用.env文件配合process.env
如果你习惯用process.env访问变量,可以通过NX的环境变量加载机制实现:
创建环境对应的
.env文件:
项目根目录下创建.env.development和.env.production:# .env.development MONGO_URL=mongodb://localhost:27017/dev-db# .env.production MONGO_URL=mongodb://prod-host:27017/prod-db配置项目的
project.json:
在目标执行器(比如build或serve)中指定envFile:{ "targets": { "serve": { "executor": "@nx/js:node", "options": { "buildTarget": "your-project:build", "envFile": ".env.development" }, "configurations": { "production": { "envFile": ".env.production" } } }, "build": { "executor": "@nx/js:tsc", "options": { // ...其他构建配置 "envFile": ".env.development" }, "configurations": { "production": { "envFile": ".env.production" } } } } }配置TypeScript类型(可选):
避免TypeScript报错,在项目根目录的typings.d.ts中添加:declare namespace NodeJS { interface ProcessEnv { MONGO_URL: string; } }在代码中使用:
console.log(process.env.MONGO_URL);
为什么之前process.env.MONGO_URL返回undefined?
NX的environment.ts文件是编译时注入的静态配置,不属于Node.js的process.env环境变量体系,所以直接用process.env访问不到。只有通过.env文件配合NX的envFile配置,才能让变量被注入到process.env中。
内容的提问来源于stack exchange,提问作者3gwebtrain

