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') ); } }
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