"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > La meilleure façon de configurer des variables d'environnement et des environnements multiples dans Nest.js

La meilleure façon de configurer des variables d'environnement et des environnements multiples dans Nest.js

Publié le 2024-08-16
Parcourir:222

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

Ce que J'aime vraiment dans Nest.js, c'est qu'il s'agit d'un puissant framework node.js complet qui vous offre des solutions complètes proposées pour la création applications back-end.

Il intègre dès le départ la prise en charge de TypeScript et combine des éléments de OOP (programmation orientée objet), FP (programmation fonctionnelle) et FRP (Functional Reactive Programming), comme le dit le site officiel.

Il a également une architecture dès le départ, ce qui est incroyable pour quelqu'un comme moi qui aime travailler avec de bons projets d'architecture structurés.

La documentation à elle seule est très impressionnante et couvre tous les aspects, y compris comment définir les variables d'environnement, mais pour moi
Je n'ai pas vraiment compris comment définir plusieurs environnements.

Peut-être parce que je suis nouveau sur node.js et nestjs, cependant, lorsque je cherchais des articles sur Internet, ils montraient toujours un moyen d'utiliser directement la bibliothèque dotenv au lieu d'utiliser nestjs de manière native, qui utilise dotenv sous le capot.

Et après de nombreuses heures à parcourir des articles à côté de la documentation, j'ai élaboré une solution native de Nestjs et j'ai pensé la partager.


D'abord

Supposons que nous ayons besoin de 2 environnements pour notre projet 'dev' et 'prod'
et nous avons besoin de 2 variables d'environnement par environnement : PORT et DATABASE_URL.

1- Créez 2 fichiers .env pour stocker  PORT et DATABASE_URL et nommez les fichiers ( .env.dev et .env.prod.)

PORT=3500

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

2- Créez une variable d'environnement appelée NODE_ENV, mais cette fois au lieu de la stocker dans un fichier .env, nous l'injecterons dans les scripts de démarrage pour dev et prod.

La configuration de NODE_ENV peut être différente selon les plates-formes (windows, mac ou Linux), nous allons donc installer un package cross-div pour nous permettre de définir des variables d'environnement sur toutes les plates-formes.

installer à l'aide de npm

$ npm install --save-dev cross-env

ou en utilisant pnpm

$ pnpm install --save-dev cross-env

Ensuite, modifiez vos scripts package.json pour utiliser 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",
}

Alors maintenant, lorsque vous exécutez votre application avec

npm run start:dev 

ou

pnpm run start:dev

Vous disposez de NODE_ENV=dev et vous pouvez l'utiliser dans toute l'application.

3- Pour que Nestjs puisse lire les fichiers .env, nous devons utiliser ConfigModule et le configurer correctement, mais nous devons d'abord l'installer.

npm

$ npm i --save @nestjs/config

pnpm

$ pnpm i --save @nestjs/config

4- Utiliser ConfigModule :

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

envFilePath : est utilisé pour spécifier un autre chemin pour le fichier .env. 
ou lisez un fichier différent du fichier .env par défaut

.env.${process.env.NODE_ENV} se traduira par .env.dev et
Si nous exécutons la commande

npm run start:prod

.env.${process.env.NODE_ENV} se traduirait par .env.prod.

5- Comment accéder à nos variables d'environnement
Pour accéder aux variables d'environnement, nous utilisons ConfigModule.

Nous pouvons l'utiliser dans 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);
}

ou si nous en avons besoin ailleurs, nous utilisons l'injection.
Par exemple

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

  getHello(): string {
    return (
      this.configService.get('DATABASE_URL')
    );
  }
}
Déclaration de sortie Cet article est reproduit sur : https://dev.to/ahmed_hyperov/the-best-way-to-configure-environment-variables-and-multi-environments-in-nestjs-31fi?1 En cas d'infraction, veuillez contacter study_golang@163 .comdelete
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3