Das Lesen von Umgebungsvariablen kann zu Leistungsproblemen führen. Wenn Variablen über process.env gelesen werden, kann dies die Leistung beeinträchtigen, da C-Code auf Systemebene beteiligt ist, was ein ziemlich teurer Aufruf ist. Effizienter ist es, die Variable zwischenzuspeichern und dann lokal zu lesen.
In einem Node.js-Projekt wird die Verwendung des npm-Pakets dotenv empfohlen. Sie können eine .env-Datei mit allen erforderlichen Variablen in Ihrem Stammverzeichnis hinzufügen.
Beispielcode für mögliche Implementierung
1import 'dotenv/config';
2
3const cache: { [key: string]: string } = {};
4
5export const accessEnv = (key: string, defaultValue?: string): string => {
6 if (cache[key]) return cache[key];
7
8 if (!(key in process.env) || typeof process.env[key] === undefined) {
9 if (defaultValue) return defaultValue;
10 throw new Error(`${key} not found in process.env!`);
11 }
12
13 if (!(key in cache)) {
14 cache[key] = <string>process.env[key];
15 }
16
17 return cache[key];
18};
Hier ist ein Beispiel für einen Anwendungsfall:
1import "dotenv/config";
2import { accessEnv } from "./lib";
3
4const databaseURL = accessEnv("DATABASE_URL", "mongodb://localhost:27017");
5const port = parseInt(accessEnv("PORT", "7771")); // reminder: environment variables are always stored as strings
6const sessionSecret = accessEnv("COOKIE_SECRET"); // this throws an error if the environment variable is not defined
Mit dotenv werden die Umgebungsvariablen Ihres Projekts in einem Objekt zwischengespeichert. Dies verbessert nicht nur die Leistung, sondern erhöht auch die Flexibilität. Sie können weitere Variablen als allgemeine Eigenschaften hinzufügen oder bestehende Variablen umbenennen und zuordnen, um sie besser an bestimmte Kontexte anzupassen.
Quellen
Ein Node Problem , das Leistungsprobleme in React-Anwendungen bei häufigem Zugriff auf Umgebungsvariablen diskutiert.
Ein Artikel, der verschiedene Wege und Argumente für die Implementierung von dotenv aufzeigt, einschließlich Vorschlägen, wie man Sicherheitsrisiken vermeiden kann, indem man dotenv als Laufzeitabhängigkeit ausschließt.