NestJS で環境変数を扱う
.env ファイルを読み込めるようにする
Configuration | NestJS - A progressive Node.js framework
プロジェクトのルートに.envファイルを作成する。
| .env |
|---|
| PORT=3000
DATABASE_HOST=localhost
DATABASE_PORT=3306
DATABASE_USERNAME=user
DATABASE_PASSWORD=password
DATABASE_NAME=db
|
process.env経由で参照できる。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 | import { Module } from "@nestjs/common";
import { ConfigModule } from "@nestjs/config";
import { TypeOrmModule } from "@nestjs/typeorm";
import { AppController } from "./app.controller";
import { AppService } from "./app.service";
import { Todo } from "./todos/entities/todo.entity";
import { TodosModule } from "./todos/todos.module";
@Module({
imports: [
ConfigModule.forRoot(),
TypeOrmModule.forRoot({
type: "mysql",
host: process.env.DATABASE_HOST,
port: parseInt(process.env.DATABASE_PORT),
username: process.env.DATABASE_USERNAME,
password: process.env.DATABASE_PASSWORD,
database: process.env.DATABASE_NAME,
entities: [Todo],
synchronize: true,
}),
TodosModule,
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
|
実行時に.env ファイルを切り替えられるようにする
開発環境では.env.developmentを参照し、本番環境では.env.productionを参照する場合を示す。
| {
"scripts": {
"dev": "dotenv -e .env.development.local -- nest start --watch",
"prod": "npm run build && dotenv -e .env.production.local -- node dist/main"
}
}
|
--をつけることでそれ以降の引数が実行するコマンドに紐づくことを伝える。
prod の方のコマンドは動作確認していない。