lavour image post

Que hay detrás de nest config

Estamos de acuerdo en que las app corren en diferentes ambientes, usualmente corremos en el ambiente de desarrollo mientras trabajamos en la app y en el ambiente de produccion cuando desplegamos la misma.

En aplicaciones de tipo node regularmente usamos el archivo .env para confiar nuestras variables de entorno y nes tambien confía en ellas 

Para usar esta técnica nest usa ConfigModule para trabajar con variables de entorno, esto expone ConfigService que carga las variables de entorno apropiada. Nest ya ha cubierto esta necesidad con su paquete @nestJs/config el cual nos ayuda a tener el trabajo más fácil a la hora de configurar nuestras variables de entorno

npm i --save @nestjs/config
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';

@Module({
  imports: [ConfigModule.forRoot()],
})
export class AppModule {}

Al hacer esto estamos indicando que acceda a las variables de entorno ej: ROOT_NAME='mark dallas' que normalmente se colocan en el root del proyecto como un .env entonces añadiendo .forRoot() indicamos que podemos acceder con .get() desde la raiz del módulo lo que significa que estará disponible para el main del servicio.

Esta configuración hara el llamado a .env pero podemos especificar variables de entorno para que apunte a las variables de desarrollo lo cual es conveniente como en todo proyecto para separar estos ambientes, de igual modo no solo podrías asinar variables de entorno diferentes, sinó que puedes configurar varias y no solo una. 

ConfigModule.forRoot({
  envFilePath: ['.env.development.local', '.env.development'],
});

Podemos deshabilitar la carga de las variables de entorno con ignoreEnvFile 

ConfigModule.forRoot({
  ignoreEnvFile: true,
});

Finalmente si se desea que estas variables puedan ser cargadas por los demás módulos solo tenemos que declararla como global. 


ConfigModule.forRoot({
  isGlobal: true,
});

En este post podemos ver como congigurar un archivo custom para refactorizar mejor el código aplicado buenas prácticas y accediendo al método .get() para acceder a estas.