@nestjs/config ではなくdotenv 。@nestjs/config は内部的に dotenv も使ってます
dotenv のインストール
npm i dotenv -S npm i @types/dotenv -D
※ Windows との差異を埋めるには cross-env - npm
設定
例えば
import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; import { config } from "dotenv" async function bootstrap() { config(); … } bootstrap();
これで process.env には設定が入っている
読み込ませるファイルを切り替えたい場合は
import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; import { config } from "dotenv" async function bootstrap() { config({path: '.develop.env'}); … } bootstrap();
※ config().parsed でJSONで出力する
注意
読み込む .env は先勝ち
config(); config({path: '.develop.env'});
この場合は .env が設定されて .develop.env では上書きされない
TypeORMの接続情報の変更を簡単に済ませたかったので
// environment.ts import { TypeOrmModuleOptions } from '@nestjs/typeorm'; export const development: TypeOrmModuleOptions = { type: 'mysql', host: '', port: 0000, username: '', password: '', database: '', entities: [], synchronize: true, }; export const production: TypeOrmModuleOptions = { type: 'mysql', extra: { socketPath: '/cloudsql/xxxxxxxxxxxxxxx', }, username: '', password: '', database: '', entities: [], synchronize: true, };
と定義してこれを
import * as env from './environment'; @Module({ imports: [TypeOrmModule.forRoot(env[process.env.NODE_ENV])], providers: [AppService], controllers: [AppController], })
って呼び出しました。
参考
環境(NODE_ENV)は
- production
- development
- staging
- test
- local