Configuration - 自定義設定檔模組

Config 環境變數

在 NestJS 專案裡要讀取外部 專案時,和一般的 Node.js 專案一樣常常會透過 .env 將環境變數儲存在裡面,並在程式裡使用 process.env 來讀取相對應的變數,而 NestJS 也提供了 config 模組讓我們可以把關於組讓我的相關邏輯整合起來,在使用上也會更加簡潔~

安裝

首先我們需要在專案內先安裝好 NestJS 官方提供的 config 套件:

$ npm i --save @nestjs/config

這個套件在內部本身就使用了 dotenv 來實現環境變數讀取的邏輯。

基本使用

config 基本的使用方式相當簡單,只需要在 module 的地方將 ConfigModule 給載入進來就可以使用了。這邊的 .fotRoot() 如果沒有填入內容的話,預設會自動讀取根目錄底下的 .env,而若有不同檔名的設定檔,或是針對不同環境使用多個設定檔的需求 (例如常見的 .local、.production 的區分),也可以在裡面進行設定。

import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';

@Module({
  imports: [ConfigModule.forRoot({
    envFilePath: ['.env.local', '.env.production']
  })],
})
export class AppModule {}

envFilePath 的值可以是單一字串或陣列,如果以陣列形式輸入的話,會按照排序為優先順序來尋找對應的設定檔來載入。至於取值的方法,則是透過載入 ConfigService 並使用 get() 方法來取得變數值。

// controller/service.ts

constructor(private configService: ConfigService) {}

// ...

const username = this.configService.get<string>('USERNAME');

自定義命名空間

在使用 .env 來獲取環境變數值的時候,一般都會是以全大寫的方式來將 key 值傳入,如果想要更系統化的處理取值的操作,可以使用自定義的 configuration 來達成,首先會需要建立一個 config 檔案,並透過 NestJS config 套件中的 registerAs 來處理:

// user.config.ts

import { registerAs } from '@nestjs/config';

export default registerAs('user', () => {
  const username = process.env.USERNAME || '';
  const password = process.env.PASSWORD || '';
  return { username, password };
});

此處 registerAs 的第一個參數即為自定義 namespace 的名稱,而下面則是底下讀取進來的變數值。在使用之前需要先在 module 把這個自定義的 config 載入進來,後續就可以透過自定義的命名來引用變數了~

import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import UserConfigFactory from 'src/config/user.config';

@Module({
  imports: [ConfigModule.forRoot({
    load: [UserConfigFactory]
  })],
})
export class AppModule {}
// controller/service.ts

constructor(private configService: ConfigService) {}

// ...

const username = this.configService.get<string>('user.username');

Copyright© 2026 ZeoXer. All Rights Reserved.