境配置篇)
NestJS——環(huán)境配置篇環(huán)境變量通過在package.json設(shè)置NODE_ENV,然后在代碼中通過process.env.NODE_ENV即可拿到變量。{ ... scripts:{ start:dev: set NODE_ENVdevelopment nest start --watch, start:prod: NODE_ENVproduction node dist/src/main, } ... }直接設(shè)置需要區(qū)分Node運行環(huán)境Win:setNODE_ENVdevelopmentLinux:NODE_ENVdevelopment或者借助一些第三方庫如cross-env:cross-env NODE_ENVdevelopment nest start這樣就能在代碼中訪問到環(huán)境變量exportconstmodeprocess.env.NODE_ENV// development加載配置簡單環(huán)境直接通過nestjs/config加載對應(yīng)的配置文件即可import{Module}fromnestjs/common;import{ConfigModuleasNestConfigModule}fromnestjs/configModule({imports:[NestConfigModule.forRoot({isGlobal:true,envFilePath:[.env.${process.env.NODE_ENV}],})],exports:[],})exportclassConfigModule{}這樣就會直接加載項目根目錄下的.env.[mode]文件。復(fù)雜環(huán)境有時候項目里的需要區(qū)分環(huán)境變量很多更加靈活就需要簡單封裝一下配置模塊加載配置文件這里使用的是yaml,也可使用其它庫甚至可以自己手動解析.獲取文件內(nèi)配置內(nèi)容解析為變量導(dǎo)出使用。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配置進(jìn)行鏈接數(shù)據(jù)庫從能區(qū)分生產(chǎn)、測試開發(fā)環(huán)境。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{}寫在最后環(huán)境變量配置所以需要區(qū)分環(huán)境的才需要放置進(jìn)來而且其它的靜態(tài)變量可以通過其余文件直接導(dǎo)入到配置模塊中。