Maison > interface Web > js tutoriel > le corps du texte

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

WBOY
Libérer: 2024-08-10 06:40:36
original
351 Les gens l'ont consulté

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

Ce que j'aime vraiment chez 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 le support 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 y a aussi une architecture dès le départ, ce qui est incroyable pour quelqu'un comme moi qui aime travailler avec des projets d'architecture bien 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 capuche.

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


Premier

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"`
Copier après la connexion

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

Le paramètre NODE_ENV peut être différent 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 plusieurs plates-formes.

installer en utilisant npm

$ npm install --save-dev cross-env
Copier après la connexion

ou en utilisant pnpm

$ pnpm install --save-dev cross-env
Copier après la connexion

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",
}
Copier après la connexion

Alors maintenant, lorsque vous exécutez votre application avec

npm run start:dev 
Copier après la connexion

ou

pnpm run start:dev
Copier après la connexion

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

Copier après la connexion

pnpm

$ pnpm i --save @nestjs/config

Copier après la connexion

4- Utiliser ConfigModule :

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

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

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

npm run start:prod
Copier après la connexion

.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);
}
Copier après la connexion

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<string>('DATABASE_URL')
    );
  }
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!