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.
übersetzen5- 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!