"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > La mejor manera de configurar variables de entorno y entornos múltiples en Nest.js

La mejor manera de configurar variables de entorno y entornos múltiples en Nest.js

Publicado el 2024-08-16
Navegar:350

The Best way to configure environment variables and multi environments in Nest.js

Lo que realmente me encanta de Nest.js es que es un marco Node.js completo y potente que te ofrece soluciones completas y opciones para construir aplicaciones backend.

Tiene soporte para TypeScript integrado desde el principio y combina elementos de OOP (Programación orientada a objetos), FP (Programación funcional) y FRP (Programación reactiva funcional), como dice el sitio web oficial.

También tiene arquitectura desde el principio, lo cual es sorprendente para alguien como yo a quien le gusta trabajar con buenos proyectos de arquitectura estructurados.

La documentación por sí sola es muy impresionante y cubre todos los aspectos, incluido cómo configurar variables de entorno, pero para mí
No entendí muy bien cómo configurar múltiples entornos.

Tal vez porque soy nuevo en node.js y nestjs, sin embargo, cuando buscaba artículos en Internet, siempre mostraban una forma que usa la biblioteca dotenv directamente en lugar de usar nestjs de forma nativa, que usa dotenv bajo el capucha.

Y después de muchas horas mirando artículos junto a la documentación, encontré una solución nativa de Nestjs y pensé en compartirla.


Primero

Supongamos que necesitamos 2 entornos para nuestro proyecto 'dev' y 'prod'
y necesitamos 2 variables de entorno por entorno: PORT y DATABASE_URL.

1- Cree 2 archivos .env para almacenar  PORT y DATABASE_URL y nombre los archivos ( .env.dev y .env.prod.)

PORT=3500

DATABASE_URL="file:./dev.db"`

2- Crea una variable env llamada NODE_ENV, pero esta vez en lugar de almacenarla en un archivo .env, la inyectaremos en los scripts de inicio para desarrollo y producción.

La configuración de NODE_ENV puede ser diferente según las plataformas (Windows, Mac o Linux), por lo que instalaremos un paquete cross-div que nos permitirá configurar variables de entorno entre plataformas.

instalar usando npm

$ npm install --save-dev cross-env

o usando pnpm

$ pnpm install --save-dev cross-env

Luego, modifique sus scripts package.json para usar cross-env:

"scripts": {
    "start:dev": "cross-env-shell NODE_ENV=dev nest start --watch",
    "start:prod": "cross-env-shell NODE_ENV=prod node dist/main",
}

Así que ahora, cuando ejecutes tu aplicación con

npm run start:dev 

o

pnpm run start:dev

Tienes NODE_ENV=dev y puedes usarlo en toda la aplicación.

3- Para que Nestjs lea archivos .env, tenemos que usar ConfigModule y configurarlo correctamente, pero primero debemos instalarlo.

npm

$ npm i --save @nestjs/config

pnpm

$ pnpm i --save @nestjs/config

4- Utilice ConfigModule :

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
      envFilePath: `.env.${process.env.NODE_ENV}`,
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

envFilePath: se utiliza para especificar otra ruta para el archivo .env. 
o leer un archivo diferente al archivo .env predeterminado

.env.${process.env.NODE_ENV} se traducirá a .env.dev y
Si ejecutamos el comando

npm run start:prod

.env.${process.env.NODE_ENV} se traduciría a .env.prod.

5- Cómo acceder a nuestras variables de entorno
Para acceder a las variables de entorno, utilizamos ConfigModule.

Podemos usarlo en main.ts

async function bootstrap() {
  const app = await NestFactory.create(AppModule);

  const configService = app.get(ConfigService);
  const port = configService.get('PORT');

  await app.listen(port);
}

o si lo necesitamos en otro lugar, usamos inyección.
Por ejemplo

@Injectable()
export class AppService {
  constructor(private configService: ConfigService) {}

  getHello(): string {
    return (
      this.configService.get('DATABASE_URL')
    );
  }
}
Declaración de liberación Este artículo se reproduce en: https://dev.to/ahmed_hyperov/the-best-way-to-configure-environment-variables-and-multi-environments-in-nestjs-31fi?1 Si hay alguna infracción, por favor contacto Study_golang@163 .comeliminar
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3