! 읽기 전
이 시리즈에 있는 모든 글은 블로그 지향 기반 개발 & 공식 문서 기반으로 작성되었습니다 내용은 정확하지 않을 수도 있으며, 100% 신뢰하지 마시길 바랍니다
pnpm install @nest/config cross-env
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
envFilePath: `.${process.env.NODE_ENV}.env`,
})
],
controllers: [],
providers: [],
})
export class AppModule {}
envFilePath
envFilePath: ['.env.development.local', '.env.development'],
)ignoreEnvFile
isGlobal
{
// ...
"scripts": {
// ...
"start:dev": "cross-env NODE_ENV=local nest start --watch",
"start:prod": "cross-env NODE_ENV=dev node dist/main",
// ...
},
"dependencies": {
// ...
},
"devDependencies": {
// ...
}
.local.env (root 하위에 위치합니다)
MY_NAME=hannahLocal
.dev.env (root 하위에 위치합니다)
MY_NAME=hannahDev
controller.ts
@Controller('app')
export class AppController {
@Get('/env')
getHello(): string {
return process.env.NODE_ENV;
}
@Get('/name')
getName(): string {
return process.env.MY_NAME;
}
}
실행
pnpm start:dev
// or
pnpm start:prod
확인해보면 각각의 프로필과 이름이 나옵니다
사실 별거 없다…
app.module.ts
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
envFilePath: `.${process.env.NODE_ENV}.env`,
ignoreEnvFile: false,
}),
TypeOrmModule.forRoot({
type: 'mariadb',
host: process.env.DATABASE_HOST,
port: parseInt(process.env.DATABASE_PORT),
username: process.env.USERNAME,
password: process.env.PASSWORD,
database: process.env.DATABASE,
logging: process.env.LOGGING === 'true',
entities: [process.env.ENTITIES],
synchronize: process.env.SYNCHRONIZE === 'true',
}),
],
controllers: [],
providers: [],
})
export class AppModule {}
이렇게만 설정해주면 되는데… 왜 외부 파일로 설정한거는 로딩을 못하는지 모르겠다. 런타임에 실행되서 그런건가?? 이해할 수 없다ㅏ…
(아는 분… 답변 주세요…ㅠㅜ)