설치
yarn add @nestjs/config
먼저 AppModule 에 이런식으로 작성한다.
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
@Module({
imports: [ConfigModule.forRoot()],
})
export class AppModule {}
forRoot() 안의 인자인 ConfigModuleOptions
에는 다양한 옵션이 있다.
import { ConfigFactory } from './config-factory.interface';
import { DotenvExpandOptions } from 'dotenv-expand';
export interface ConfigModuleOptions {
cache?: boolean;
isGlobal?: boolean;
ignoreEnvFile?: boolean;
ignoreEnvVars?: boolean;
envFilePath?: string | string[];
encoding?: string;
validate?: (config: Record<string, any>) => Record<string, any>;
validationSchema?: any;
validationOptions?: Record<string, any>;
load?: Array<ConfigFactory>;
expandVariables?: boolean | DotenvExpandOptions;
}
많이 쓰는 옵션만 알아보자.
ConfigModule.forRoot({
envFilePath: '.development.env',
});
: env 파일의 경로를 추적하기 위해 사용한다.
ConfigModule.forRoot({
envFilePath: ['.env.development.local', '.env.development'],
});
: 이런 식으로 여러 파일을 불러올 수도 있다.
ConfigModule.forRoot({
ignoreEnvFile: true,
});
: env 파일을 사용하고 싶지 않을 때 사용한다.
ConfigModule.forRoot({
isGlobal: true,
});
다른 곳에서도 환경 변수를 불러올 수 있도록 전역으로 설정하기 위해 사용한다.
.env.develpment
파일에 여러 환경변수를 적어놓는다.
NODE_ENV='development'
JWT_SECRET='secret'
JWT_EXPIRATION_TIME='60'
app.module.ts
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
cache: true,
envFilePath: [`.env.${process.env.NODE_ENV}`, `env`],
validate,
...
}),
// env-cmd 설치
yarn add env-cmd
package.json
"scripts": {
...
"start:dev": "env-cmd -f .env.development nest start --watch",
...
},
env-cmd 는 각 환경에 맞게 자동으로 환경변수를 불러와 적용할 수 있도록 도와주는 패키지다.
이런식으로 사용한다.
@Injectable()
export class AuthService {
constructor(
...
private readonly configService: ConfigService,
) {}
public async register(request: RegisterRequest) {
...
const accessToken = await this.jwtService.signAsync(
instanceToPlain(createdUser),
{
secret: this.configService.get<string>('JWT_SECRET'),
},
);
}
}