Dans cet article, nous allons voir comment gérer des variables d’environnement dans un projet Node.js.
Admettons que vous souhaitez démarrer votre projet avec deux modes :
- Mode développement
- Mode production
Ces deux modes ne vont pas avoir les mêmes paramètres. Ils utiliseront les mêmes variables d’environnement, mais avec des valeurs différentes.
Par exemple, le mode de développement pourrait utiliser une variable d’environnement API_URL avec comme valeur 127.0.0.1, tandis qu’avec le mode de production cette même variable d’environnement API_URL serait égale à une autre valeur (par exemple, 8.8.8.8).
Alors, comment initialiser une nouvelle variable d’environnement et lui attribuer une valeur en fonction de notre mode ?
Nous allons voir tout ça. 😎
Initialiser un projet
Commencez par créer un nouveau projet :
npm init -y
Puis créez un nouveau fichier index.js :
touch index.js
Dans ce fichier, insérez un simple console.log :
console.log("Hello World!");
Modifiez le fichier package.json afin de lancer le projet avec un raccourci :
"scripts": { "start": "node index.js" },
Vous pouvez maintenant exécuter votre projet, avec la commande suivante :
npm run start
Vous devriez avoir « Hello World! » dans votre console. Parfait ! 🎉
Les variables d’environnement
Avec Node.js vous pouvez accéder et utiliser la propriété process.env qui contient les variables d’environnement de l’utilisateur.
Dans le fichier index.js, ajoutez la ligne suivante et relancez le serveur :
console.log(process.env);
Vous avez tout de suite plus de choses dans votre console ! 😊
Gérer les variables d’environnement
Pour gérer les variables d’environnement, vous avez plusieurs packages qui permettent de les manipuler, comme dotenv. Ici nous allons utiliser le package env-cmd. 😉
env-cmd
Commencez par installer env-cmd et ajoutez le package dans les devDependencies :
npm install env-cmd --save-dev
Ce qui est intéressant avec env-cmd, c’est qu’au lancement de votre projet, vous allez pouvoir lui fournir un fichier à utiliser avec vos variables d’environnement déclarées à l’intérieur. 👌
Commencez par créer à la racine de votre projet un dossier env. Puis à l’intérieur, créez trois fichiers :
- .env
- .env.dev
- .env.prod
Le .env servira de template, de référence. Les autres développeurs pourront voir par la suite les variables d’environnement déclarées dans votre projet.
Sur un « vrai » projet et non un boilerplate c’est UNIQUEMENT ce fichier qui doit être commité. Les autres fichiers .env.dev et .env.prod ne doivent jamais être commité ! Question de sécurité.
Créez les fichiers :
mkdir env cd env touch .env touch .env.dev touch .env.prod
Vous pouvez maintenant définir les variables d’environnement dans ces fichiers.
.env :
NODE_ENV=template APP_NAME=My App API_URL=127.0.0.1
.env.dev :
NODE_ENV=development APP_NAME=My App API_URL=127.0.0.1
.env.prod :
NODE_ENV=production APP_NAME=My App API_URL=8.8.8.8
Il ne vous reste plus qu’à charger ces fichiers au démarrage de votre application.
Pour cela, modifiez la section start du package.json :
"scripts": { "dev": "env-cmd -f ./env/.env.dev node index.js", "prod": "env-cmd -f ./env/.env.prod node index.js" },
Pour démarrer votre projet, vous utiliserez maintenant les commandes suivantes :
- pour le mode développement :
npm run dev
- pour le mode production :
npm run prod
Faites le test : mettez à jour votre fichier index.js avec ces lignes :
console.log(`${process.env.APP_NAME}`) console.log(`Ready on ${process.env.NODE_ENV} mode`) console.log(`API : ${process.env.API_URL}`)
Puis lancez votre projet en mode développement npm run dev
. Vous devriez avoir ça :
En mode production npm run prod
:
Parfait ! Vous pouvez maintenant gérer vos variables d’environnement avec un fichier.
Attention : je le répète, ne jamais ajouter vos fichiers de variables d’environnement dans un commit !
Le mieux reste de déclarer ces variables d’environnement directement sur le serveur et non dans des fichiers. Question de sécurité, toujours ! 😉
Retrouvez le boilerplate sur Github :