@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