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 .

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:verySafePassword@mongodb.nolhan.dev/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 . Pour éviter les erreurs, ajoutez ceci à votre configuration :

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

Vous voulez travailler avec moi ?

Parlons de votre projet, et je vous enverrai un devis personnalisé sous 48 heures.

Copyright © 2026

Made with 🥖 in Sud Ouest, France