
NestJS——環境配置篇環境變量通過在package.json設置NODE_ENV,然后在代碼中通過process.env.NODE_ENV即可拿到變量。{ ... scripts:{ start:dev: set NODE_ENVdevelopment nest start --watch, start:prod: NODE_ENVproduction node dist/src/main, } ... }直接設置需要區分Node運行環境Win:setNODE_ENVdevelopmentLinux:NODE_ENVdevelopment或者借助一些第三方庫如cross-env:cross-env NODE_ENVdevelopment nest start這樣就能在代碼中訪問到環境變量exportconstmodeprocess.env.NODE_ENV// development加載配置簡單環境直接通過nestjs/config加載對應的配置文件即可import{Module}fromnestjs/common;import{ConfigModuleasNestConfigModule}fromnestjs/configModule({imports:[NestConfigModule.forRoot({isGlobal:true,envFilePath:[.env.${process.env.NODE_ENV}],})],exports:[],})exportclassConfigModule{}這樣就會直接加載項目根目錄下的.env.[mode]文件。復雜環境有時候項目里的需要區分環境變量很多更加靈活就需要簡單封裝一下配置模塊加載配置文件這里使用的是yaml,也可使用其它庫甚至可以自己手動解析.獲取文件內配置內容解析為變量導出使用。import*asfsfromfsimport{join}frompathimport{load}fromjs-yamlimportIConfigurationfrom./configuration.interfaceconstloadEnvFile(mode){constenvPathjoin(process.cwd(),.env.${mode}.yaml)console.log([env path]${envPath})try{returnfs.readFileSync(envPath,utf8)}catch(err){console.log(env file is not exist,err)return}}constenvload(loadEnvFile(process.env.NODE_ENV))asIConfigurationexportconstPORTenv.http.port;exportdefault(){returnenv};定義類型exportinterfaceIMysql{port:numberhost:stringname:stringuser:stringpassword:string}exportinterfaceIDb{mysql:IMysql}interfaceIHttp{port:number}exportdefaultinterfaceIConfiguration{http:IHttp db:IDb}加載NestModuleimport{Module}fromnestjs/common;import{ConfigModuleasNestConfigModule}fromnestjs/configimportconfigurationfrom./configurationModule({imports:[NestConfigModule.forRoot({isGlobal:true,load:[configuration]})],exports:[],})exportclassConfigModule{}使用變量這里通過獲取配置中mysql配置進行鏈接數據庫從能區分生產、測試開發環境。import{MikroOrmModule}frommikro-orm/nestjs;import{Module}fromnestjs/common;import{ConfigService}fromnestjs/config;import{ConfigModule}fromsrc/config/config.module;import{IMysql}fromsrc/config/configuration.interface;importmikroOrmConfigfrom./mikro-orm.configModule({imports:[MikroOrmModule.forRootAsync({imports:[ConfigModule],inject:[ConfigService],useFactory:async(configService:ConfigService){returnmikroOrmConfig(configService.getIMysql(db.mysql));},})]})exportclassDbModule{}寫在最后環境變量配置所以需要區分環境的才需要放置進來而且其它的靜態變量可以通過其余文件直接導入到配置模塊中。