
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 :
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:[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.
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 Nuxt. Pour éviter les erreurs, ajoutez ceci à votre configuration :
export default defineNuxtConfig({
// ...
nitro: {
esbuild: {
options: {
target: "esnext"
}
}
}
// ...
});