Verwaltung der Konfiguration von TypeScript-Anwendungen: Vollständiger Leitfaden

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Konfiguration von TypeScript-Anwendungen: Vom Einfachen zum Komplexen

Jede moderne Anwendung erfordert eine flexible und sichere Konfiguration. Ob API-Schlüssel, Datenbankverbindungsparameter, Serverports oder Feature-Flags – die Konfiguration sollte vom Code getrennt, leicht lesbar und beim Start validierbar sein. In der Welt von TypeScript hat diese Aufgabe ihre Besonderheiten: Die Typisierung der Konfiguration bietet Autovervollständigung und verhindert Laufzeitfehler. In diesem Artikel behandeln wir die besten Praktiken, beliebten Bibliotheken und Tools für die Verwaltung der Konfiguration von TypeScript-Anwendungen.



Warum sollte man process.env nicht direkt verwenden?

Auf den ersten Blick scheint das Lesen von Umgebungsvariablen über process.env eine einfache Lösung zu sein. Dieser Ansatz hat jedoch erhebliche Nachteile:

  • Fehlende Typisierung: Alle Werte sind Zeichenketten, auch wenn es sich logisch um eine Zahl oder einen booleschen Wert handelt.
  • Risiko von Tippfehlern: Es ist leicht, process.env.DB_HOTS anstelle von DB_HOST zu schreiben und undefined zu erhalten.
  • Fehlende Validierung: Wenn eine erforderliche Variable nicht gesetzt ist, stürzt die Anwendung im ungünstigsten Moment ab, nicht beim Start.

Eine durchdachte Konfiguration löst all diese Probleme.



Die Bibliothek dotenv und ihre TypeScript-Wrapper

Der De-facto-Standard zum Laden von .env-Dateien ist die Bibliothek dotenv. Für TypeScript ist die Verwendung von dotenv-flow oder dotenv-expand praktisch, die mehrere Umgebungen (Entwicklung, Staging, Produktion) unterstützen.

// Installation// npm install dotenv dotenv-expand

// config/env.tsimport dotenv from 'dotenv';import dotenvExpand from 'dotenv-expand';

const myEnv = dotenv.config({ path: `.env.${process.env.NODE_ENV || 'development'}` });dotenvExpand.expand(myEnv);

Nach dem Aufruf dieser Funktion sind alle Variablen aus der .env-Datei über process.env verfügbar, aber wir haben immer noch keine Typen.



Schemavalidierung mit Zod

Zod ist eine leistungsstarke Bibliothek zur deklarativen Schemavalidierung mit erstklassiger TypeScript-Unterstützung. Sie ist ideal für die Konfiguration:

// config/schema.tsimport { z } from 'zod';

const envSchema = z.object({ NODE_ENV: z.enum(['development', 'production', 'test']).default('development'), PORT: z.coerce.number().positive().default(3000), DATABASE_URL: z.string().url(), JWT_SECRET: z.string().min(32), REDIS_HOST: z.string().default('localhost'), REDIS_PORT: z.coerce.number().default(6379), FEATURE_NEW_UI: z .string() .transform((val) => val === 'true') .default('false'),});

export type EnvConfig = z.infer<typeof envSchema>;

Jetzt können wir die Umgebung beim Start sicher parsen und validieren:

// config/index.tsimport { envSchema, EnvConfig } from './schema';

let config: EnvConfig;

export function loadConfig(): EnvConfig { if (config) return config; // Caching

const result = envSchema.safeParse(process.env); if (!result.success) { console.error('❌ Ungültige Umgebungsvariablen:', result.error.flatten().fieldErrors); process.exit(1); } config = result.data; return config;}

export function getConfig(): EnvConfig { if (!config) throw new Error('Config nicht geladen. Rufen Sie zuerst loadConfig() auf.'); return config;}


Die Bibliothek Conf zur Verwaltung der Anwendungskonfiguration

Wenn Ihre Anwendung nicht nur das Lesen, sondern auch das Schreiben von Konfigurationen erfordert (z. B. Benutzereinstellungen, Cache), werfen Sie einen Blick auf conf von Sindre Sorhus. Es speichert Daten in einer JSON-Datei und ist vollständig typisiert.

// Installation// npm install conf

import Conf from 'conf';

interface AppConfig { lastOp

Empfehlungen