Heim >Web-Frontend >js-Tutorial >Der beste Weg, Umgebungsvariablen und mehrere Umgebungen in Nest.js zu konfigurieren

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

WBOY
WBOYOriginal
2024-08-10 06:40:36387Durchsuche

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 opionierte Komplettlösungen zum Erstellen bietet Backend-Anwendungen.

Es verfügt von Anfang an über integrierte TypeScript-Unterstützung 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.

Die Dokumentation allein ist sehr beeindruckend und deckt jeden Aspekt ab, einschließlich der Einstellung 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, habe ich eine Lösung ausgearbeitet, die in Nestjs nativ ist, und dachte, ich würde sie teilen.


Zuerst

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 2 .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 Entwicklung und Produktion einfügen.

Die Einstellung von NODE_ENV kann auf verschiedenen Plattformen (Windows, Mac oder Linux) unterschiedlich sein. Daher installieren wir ein div-übergreifendes Paket, 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",
}

Also jetzt, wenn Sie 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 zu .env.prod.

übersetzen

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 eine Injektion.
zum Beispiel

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

  getHello(): string {
    return (
      this.configService.get<string>('DATABASE_URL')
    );
  }
}

Das obige ist der detaillierte Inhalt vonDer beste Weg, Umgebungsvariablen und mehrere Umgebungen in Nest.js zu konfigurieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn