
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 :
npm install typescript @types/node mongoose
Puis créons les fichiers de départ de notre exemple :
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)
})()
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.
npm install @adonisjs/env
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;
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 :
export default defineNuxtConfig({
// ...
nitro: {
esbuild: {
options: {
target: "esnext"
}
}
}
// ...
});