Gestion de la configuration des applications TypeScript : guide complet

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Configuration des applications TypeScript : du simple au complexe

Toute application moderne nécessite une configuration flexible et sécurisée. Qu'il s'agisse de clés API, de paramètres de connexion à la base de données, de ports serveur ou de flags de fonctionnalités, la configuration doit être séparée du code, facile à lire et validée au démarrage. Dans le monde du TypeScript, cette tâche a ses particularités : le typage de la configuration offre l'autocomplétion et prévient les erreurs d'exécution. Dans cet article, nous analyserons les meilleures pratiques, les bibliothèques populaires et les outils de gestion de configuration pour les applications TypeScript.



Pourquoi ne pas utiliser process.env directement ?

À première vue, lire les variables d'environnement via process.env semble une solution simple. Cependant, cette approche présente des inconvénients majeurs :

  • Absence de typage : toutes les valeurs sont des chaînes, même si logiquement ce devrait être un nombre ou un booléen.
  • Risque de fautes de frappe : il est facile d'écrire process.env.DB_HOTS au lieu de DB_HOST et d'obtenir undefined.
  • Absence de validation : si une variable obligatoire n'est pas définie, l'application plantera au moment le plus inattendu, et non au démarrage.

Une configuration bien conçue résout tous ces problèmes.



La bibliothèque dotenv et ses wrappers TypeScript

Le standard de facto pour charger les fichiers .env est la bibliothèque dotenv. Pour TypeScript, il est pratique d'utiliser dotenv-flow ou dotenv-expand, qui prennent en charge plusieurs environnements (development, staging, production).

// 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);

Après avoir appelé cette fonction, toutes les variables du fichier .env seront accessibles via process.env, mais nous n'avons toujours pas de types.



Validation de schéma avec Zod

Zod est une bibliothèque puissante pour la validation déclarative de schémas avec un support de premier ordre pour TypeScript. Elle est idéale pour la configuration :

// 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>;

Nous pouvons désormais analyser et valider l'environnement en toute sécurité au démarrage :

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

let config: EnvConfig;

export function loadConfig(): EnvConfig { if (config) return config; // mise en cache

const result = envSchema.safeParse(process.env); if (!result.success) { console.error('❌ Variables d'environnement invalides :', result.error.flatten().fieldErrors); process.exit(1); } config = result.data; return config;}

export function getConfig(): EnvConfig { if (!config) throw new Error('Configuration non chargée. Appelez loadConfig() d'abord.'); return config;}


La bibliothèque Conf pour la gestion de la configuration d'application

Si votre application nécessite non seulement la lecture mais aussi l'écriture de configuration (par exemple, paramètres utilisateur, cache), jetez un œil à conf de Sindre Sorhus. Elle stocke les données dans un fichier JSON et est entièrement typée.

// Installation// npm install conf

import Conf from 'conf';

interface AppConfig { lastOp

Recommendations