Maison > Article > interface Web > La meilleure façon de configurer des variables d'environnement et des environnements multiples dans 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"`
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
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 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
.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<string>('DATABASE_URL') ); } }
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!