Des types pour les .env !

Introduction

Depuis presque quatre ans que j’utilise , je me suis rendu compte qu'il y avait encore un élément non typé dans mes projets : les variables d’environnement. Et récemment, j’ai voulu tester qui intègre dans leur écosystème de modules @adonisjs/env qui permet de valider le fichier .env à l’aide d’un schéma particulier et ainsi d’éviter les erreurs bêtes. Dans ce tutoriel, je vais vous montrer comment l’intégrer à n’importe quel projet TypeScript.

Tutoriel

Dans ce tutoriel, nous créerons une application qui renverra dans la console la liste des posts d’une base de données.

Initialisation

Tout d’abord, commençons par installer les dépendances nécessaires :

Terminal
npm install typescript @types/node mongoose

Puis créons les fichiers de départ de notre exemple :

index.ts
import * as mongoose from "mongoose";

mongoose.connect(process.env.DATABASE_URL)

const Post = mongoose.model('Post', { title: String, content: String });

(async () => {
  const posts = await Post.find().exec();
  
  console.log(posts)
})()
.env
DATABASE_URL="mongodb://john.doe:[email protected]/posts"

Pour le moment, les variables d’environnement ne sont pas validées ce qui signifie que si je ne crée pas de .env, process.env.DATABASE_URL renverra undefined et créera une erreur dans notre code.

Avec @adonisjs/env

Le but d'@adonisjs/env est de nous prévenir dès le démarrage de notre application qu'il y a une erreur dans le .env. Nous allons donc l'intégrer à l'exemple précédent.

Terminal
npm install @adonisjs/env
env.ts
import { Env } from "@adonisjs/env";

// Indique à @adonisjs/env que le .env est dans le dossier actuel
//                                    ↓
const env = await Env.create(new URL("./", import.meta.url), {
  DATABASE_URL: Env.schema.string(),
});

export default env;
index.ts
import * as mongoose from "mongoose";
import env from "./env.ts"

mongoose.connect(env.get('DATABASE_URL'))

const Post = mongoose.model('Post', { title: String, content: String });

(async () => {
  const posts = await Post.find().exec();
  
  console.log(posts)
})()

Et maintenant, si je supprime le fichier .env, j’obtiendrai l’erreur suivante :

EnvValidationException: Validation failed for one or more environment variables
{
  status: 500,
  code: 'E_INVALID_ENV_VARIABLES',
  help: '- Missing environment variable "DATABASE_URL"'
}

Utilisation avec Nuxt

La première fois que j’ai voulu utiliser @adonisjs/env, c’était avec Nuxt. Pour éviter les erreurs, ajoutez ceci à votre configuration :

nuxt.config.ts
export default defineNuxtConfig({
  // ...
  nitro: {
    esbuild: {
      options: {
        target: "esnext"
      }
    }
  }
  // ...
});

© Nolhan 2025 - Tous droits réservés