nest.js中不同環境的配置讀取
node中不同環境的配置讀取
在node中最常用的是.env格式的配置文件,他有一個專門的npm包 dotenv:
我們來創建一個node項目試一下:

進入這個目錄,安裝dotenv:
npm install dotenv
然后新建一個.env配置文件:
aaa=1
bbb=2
新建index.js并寫入如下內容:
require('dotenv').config({
path: './.env',
})
console.log(process.env)
node執行一下:
node index.js

打印的環境變量中就包含了.env中的內容
那如果還有生產環境的配置文件呢
比如.production.env:
a=111
b=222
我們可以通過NODE_ENVIRONMENT環境變量來切換:
require('dotenv').config({
path: process.env.NODE_ENVIRONMENT === 'production' ? '.production.env' : '.env',
})
console.log('aaa', process.env.aaa);
console.log('bbb', process.env.bbb)
nest.js中讀取不同環境配置
nest中提供了完整的解決方案:@nestjs/config
我們創建個nest項目來試一下:
nest new nest-config-test -p npm
安裝一下@nestjs/config包:
npm install --save @nestjs/config
這個包同樣是動態模塊的方式,他有forRoot和fotFeature兩個方法
我們在根目錄加一個配置文件.env:
aaa=1
bbb=2
然后在AppModule里面引入:

然后再AppController里注入ConfigService來讀取配置:

把nest服務跑起來:
npm run start:dev
瀏覽器訪問:

可以看到,nest讀取到了.env里的配置
如果有多個配置,比如還有個.aaa.env:
aaa=3
在AppModule中這樣指定:
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ConfigModule } from '@nestjs/config';
import * as path from 'path';
@Module({
imports: [
ConfigModule.forRoot({
envFilePath: [
path.join(process.cwd(), '.aaa.env'),
path.join(process.cwd(), '.env'),
],
}),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
前面的配置會覆蓋后面的配置。
重新跑一下,并訪問:

可以看到aaa的值被覆蓋了
如何配置多環境呢?
在項目根目錄下分別創建.env、.env.dev、.env.prod文件并且在ConfigModule中加載:
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ConfigModule } from '@nestjs/config';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
envFilePath: ['.env.dev', '.env', '.env.prod'],
}),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
安裝依賴包來配置設置當前環境:
npm install cross-env
手動配置啟動環境的配置,修改package.json文件啟動命令:
"start": "cross-env RUNNING_ENV=dev nest start",
"start:dev": "cross-env RUNNING_ENV=dev nest start --watch",
"start:debug": "nest start --debug --watch",
"start:prod": "cross-env RUNNING_ENV=prod node dist/main",
然后在appModule.ts中寫入如下內容:

可以看到,不用環境中啟動,會加載不同的.env配置文件
浙公網安備 33010602011771號