„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Der beste Weg, Umgebungsvariablen und mehrere Umgebungen in Nest.js zu konfigurieren

Der beste Weg, Umgebungsvariablen und mehrere Umgebungen in Nest.js zu konfigurieren

Veröffentlicht am 16.08.2024
Durchsuche:636

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

Was ich an Nest.js wirklich liebe, ist, dass es ein leistungsstarkes, vollständiges Node.js-Framework ist, das Ihnen individuelle Komplettlösungen zum Erstellen bietet Backend-Anwendungen.

Es verfügt von Anfang an über eine integrierte Unterstützung für TypeScript und kombiniert Elemente von OOP (objektorientierte Programmierung), FP (funktionale Programmierung) und FRP (Functional Reactive Programming), wie es auf der offiziellen Website heißt.

Es hat auch Architektur von Anfang an, was für jemanden wie mich, der gerne mit gut strukturierten Architekturprojekten arbeitet, erstaunlich ist.

Allein die Dokumentation ist sehr beeindruckend und deckt jeden Aspekt ab, einschließlich der Festlegung von Umgebungsvariablen, aber für mich
Ich habe nicht ganz verstanden, wie man mehrere Umgebungen einrichtet.

Vielleicht, weil ich neu bei node.js und nestjs bin. Als ich jedoch im Internet nach Artikeln suchte, zeigten sie immer eine Möglichkeit, die Dotenv-Bibliothek direkt zu verwenden, anstatt Nestjs nativ zu verwenden, das Dotenv unter verwendet Haube.

Und nachdem ich viele Stunden lang Artikel neben der Dokumentation durchgesehen hatte, erarbeitete ich eine Lösung, die in Nestjs nativ ist, und dachte, ich würde sie teilen.


Erste

Nehmen wir an, wir benötigen zwei Umgebungen für unser Projekt 'dev' und 'prod'
und wir benötigen 2 Umgebungsvariablen pro Umgebung: PORT und DATABASE_URL.

1 – Erstellen Sie zwei .env-Dateien zum Speichern von  PORT und DATABASE_URL und benennen Sie die Dateien ( .env.dev und .env.prod.)

PORT=3500

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

2- Erstellen Sie eine Umgebungsvariable mit dem Namen NODE_ENV, aber dieses Mal werden wir sie nicht in einer .env-Datei speichern, sondern in Startskripte für Entwickler und Produkte einfügen.

Die Einstellung von NODE_ENV kann auf verschiedenen Plattformen (Windows, Mac oder Linux) unterschiedlich sein. Daher werden wir ein div-übergreifendes Paket installieren, damit wir Umgebungsvariablen plattformübergreifend festlegen können.

Installation mit npm

$ npm install --save-dev cross-env

oder mit pnpm

$ pnpm install --save-dev cross-env

Ändern Sie dann Ihre package.json-Skripts, um Cross-Env zu verwenden:

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

Wenn Sie also jetzt Ihre Anwendung mit
ausführen

npm run start:dev 

oder

pnpm run start:dev

Sie haben NODE_ENV=dev und können es in der gesamten Anwendung verwenden.

3- Damit Nestjs .env-Dateien lesen kann, müssen wir ConfigModule verwenden und es richtig konfigurieren, aber zuerst müssen wir es installieren.

npm

$ npm i --save @nestjs/config

pnpm

$ pnpm i --save @nestjs/config

4- Verwenden Sie ConfigModule:

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

envFilePath: wird verwendet, um einen anderen Pfad für die .env-Datei anzugeben. 
oder eine andere Datei als die Standard-.env-Datei lesen

.env.${process.env.NODE_ENV} wird übersetzt in .env.dev und
Wenn wir den Befehl
ausführen

npm run start:prod

.env.${process.env.NODE_ENV} würde übersetzt werden in .env.prod.

5- So greifen Sie auf unsere Umgebungsvariablen zu
Um auf Umgebungsvariablen zuzugreifen, verwenden wir ConfigModule.

Wir können es in main.ts
verwenden

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

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

  await app.listen(port);
}

oder wenn wir es an einer anderen Stelle benötigen, verwenden wir Injektion.
Zum Beispiel

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

  getHello(): string {
    return (
      this.configService.get('DATABASE_URL')
    );
  }
}
Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/ahmed_hyperov/the-best-way-to-configure-environment-variables-and-multi-environments-in-nestjs-31fi?1 Wenn es einen Verstoß gibt, bitte Kontaktieren Sie Study_golang@163 .comdelete
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3