TL;DL
- @nestjs/configを使いましょう
- 環境変数のバリデーションをしましょう
- 環境変数もDIしましょう
- 詳細はこちらのPRから確認できます
全体の流れ
公式ドキュメントを参考に以下の流れで導入します。
依存パッケージのインストール
# config用yarn add @nestjs/config
# バリデーション用yarn add joi
設定モジュールを全体適用
import { ConfigModule } from '@nestjs/config'
@Module({ imports: [ // 設定モジュールを全体適用し後述のvalidationSchemaで環境変数をバリデーション ConfigModule.forRoot({ isGlobal: true, cache: true, validationSchema }) ]})export class AppModule {}
設定サービスの作成
// /src/modules/configs/configs.service.ts 等import { Injectable } from '@nestjs/common'import { ConfigService } from '@nestjs/config'
@Injectable()export class ApiConfigService { constructor(private configService: ConfigService) {}
// required get NODE_ENV(): string { return this.configService.get('NODE_ENV') }
// optional get SERVER_PORT(): number { console.log(typeof this.configService.get('SERVER_PORT')) return this.configService.get('SERVER_PORT') }}
バリデータの追加
// /src/modules/configs/configs.validator.ts 等import * as Joi from 'joi'
export const validationSchema = Joi.object({ // required NODE_ENV: Joi.string().required().valid('development', 'production', 'test'),
// optional SERVER_PORT: Joi.number()})
プロバイダに設定サービス追加
{ // ...snip providers: [SomeService, ApiConfigService]}
コンストラクタに設定サービス追加
// ...snipconstructor(private readonly apiConfigService: ApiConfigService) {}