The
@nestjs/configpackage internally usesdotenv.
config 모듈은 내부에서 dotenv를 사용하고, nestjs 방식으로 돌아간다.
설치
npm i @nest/config cross-env
.env 파일 생성
.env.dev
.env.test
.env.prod
package.json 수정
"start:dev": "cross-env ENV=dev nest start --watch",
"start": "cross-env ENV=prod nest start",
.env.dev 에 변수 추가
DB_HOST=
DB_PORT=
DB_USERNAME=
DB_PASSWORD=
DB_NAME=
앱모듈에 설정 적용 (ConfigModule)
// app.module.ts
import { Module } from '@nestjs/common';
import { GraphQLModule } from '@nestjs/graphql';
import { ApolloDriver } from '@nestjs/apollo';
import { RestaurantsModule } from './restaurants/restaurants.module';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ConfigModule } from '@nestjs/config';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
envFilePath: process.env.NODE_ENV === 'dev' ? '.env.dev' : '.env.test',
ignoreEnvFile: process.env.NODE_ENV === 'prod',
}),
TypeOrmModule.forRoot({
type: 'postgres',
host: process.env.DB_HOST,
port: +process.env.DB_PORT,
username: process.env.DB_USERNAME,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
synchronize: true,
logging: true,
}),
GraphQLModule.forRoot({
driver: ApolloDriver,
autoSchemaFile: true,
}),
RestaurantsModule,
],
controllers: [],
providers: [],
})
export class AppModule {}
validationSchema 옵션
원하는 모든 환경 변수의 유효성 검사
환경 변수의 유효성 검사를 통해 환경변수가 준비되지 않았을 경우 앱이 실행되지 않도록 하기!
joi 설치
npm i joi
joi 는 100% javascript로 이루어져 있다. 이럴 경우 import 방법이 다르다 ! !
typescript나 NestJS로 되어 있지 않은 패키지 import 방법
app.module.ts
import * as Joi from 'joi';
imports: [
ConfigModule.forRoot({
isGlobal: true,
envFilePath: process.env.NODE_ENV === 'dev' ? '.env.dev' : '.env.test',
ignoreEnvFile: process.env.NODE_ENV === 'prod',
validationSchema: Joi.object({
NODE_ENV: Joi.string().valid('dev', 'prod'),
}),
}),
NODE_ENV 는 string 이어야 하고, valid() 안의 요소들 중 하나여야 한다.
만약 이렇게 적으면?
ConfigModule.forRoot({
isGlobal: true,
envFilePath: process.env.NODE_ENV === 'dev' ? '.env.dev' : '.env.test',
ignoreEnvFile: process.env.NODE_ENV === 'prod',
validationSchema: Joi.object({
NODE_ENV: Joi.string().valid('cookie'),
}),

에러 발생!