Formation Node.js | Créer des Variables d'Environnement (.env)
Présent à la racine de la plupart des projets Node.js, le fichier .env permet de définir des variables d'environnement.
À quoi sert le fichier .env ?
Fichier de configuration
Le fichier 📄 .env
(prononcé « dot env ») est un fichier de configuration couramment utilisé dans les applications Node.js.
Il s’agit d’un fichier texte contenant des paires clé-valeur qui définissent des variables d’environnement pour votre application.
VARIABLE1=valeur
VARIABLE2="valeur avec espaces"
Cas d’usage
Plateformes de déploiement
De nombreuses plateformes de déploiement (Heroku, Digital Ocean, Microsoft Azure, AWS, now.sh, etc.) utilisent des variables d’environnement.
Cela leur permet par exemple de définir une variable PORT
spécifiant sur quel port le serveur doit écouter pour fonctionner correctement.
Modules tiers
Certains modules vont aussi exploiter les variables d’environnement pour leur configuration et fonctionnement.
- La variable
NODE_ENV
permet par exemple de définir un environnement d’exécution (développement, test, production…) pouvant impacter son comportement. - Les variables
DB_HOST
,DB_PORT
,DB_USERNAME
,DB_PASSWORD
etDB_NAME
permettent par exemple de spécifier des informations de connexion à une base de données. - Les variables
SMTP_HOST
,SMTP_PORT
,SMTP_USER
,SMTP_PASS
etSMTP_SECURE
permettant par exemple de spécifier des informations de connexion à un serveur SMTP. - Etc.
Application
Les variables d’environnement pourront également être exploitées au sein même de l’application que vous développez pour centraliser et partager tout type d’information.
- Des clés API. Exemples :
NOTION_API_KEY
,SUPABASE_KEY
… - Des URLs. Exemples :
SUPABASE_URL
,BASE_URL
… - Des identifiants. Exemple :
GOOGLE_ANALYTICS_ID
… - Etc.
Accéder aux variables d’environnement
L’objet Node.js process.env
contient toutes les variables d’environnement définies dans le système d’exploitation. Lorsqu’une application Node.js est exécutée, elle hérite des variables d’environnement définies dans le système d’exploitation sur lequel elle s’exécute.
Lorsque vous affichez process.env
dans le REPL, vous verrez apparaître la liste de toutes les variables d’environnement disponibles, avec leurs valeurs associées.
console.log(process.env);
Si la variable d’environnement PROCESSOR_ARCHITECTURE
est définie au niveau de votre OS, alors il sera possible de récupérer sa valeur depuis le REPL ou un fichier .js
:
console.log(process.env.PROCESSOR_ARCHITECTURE); // Ex : AMD64
En revanche, si vous essayez d’accéder à une variable d’environnement de votre projet (définie dans le fichier 📄 .env
), vous constaterez que cette variable est undefined
.
Cela est dû au fait que Node.js ne charge pas automatiquement les variables d’environnement à partir d’un fichier 📄 .env
. Pour cela, vous devrez utiliser un module tel que dotenv
.
Package dotenv
dotenv
est un module sans aucune dépendance permettant de charger les variables d’environnement à partir d’un fichier 📄 .env
via la propriété env
de l’objet global process
de Node.js.
Ainsi, lorsque votre application est lancée, les variables contenues dans le fichier .env
sont chargées dans le processus d’exécution de l’application en tant que variables d’environnement, les rendant accessibles dans votre code JavaScript.
Installation
Taper la ligne de commande suivante :
npm install dotenv
Déclaration des variables
Déclarons par exemple une variable d’environnement BASE_URL
:
BASE_URL=https://laconsole.dev
Exploitation des variables
Pour utiliser les variables d’environnement dans un fichier .js
, on charge le module dotenv
au début de ce fichier en appelant la méthode config
:
require('dotenv').config();
Cela chargera toutes les variables d’environnement définies dans votre fichier 📄 .env
dans process.env
, et vous pourrez y accéder en utilisant process.env.MA_VARIABLE
où MA_VARIABLE
est le nom de la variable que vous avez définie dans votre fichier .env
.
require('dotenv').config();
const http = require('http');
const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {
console.log(process.env.BASE_URL); // Affiche 'https://laconsole.dev'
});
server.listen(port, hostname, () => {
console.log(`Server listening on http://${hostname}:${port}`);
});
Il est également fréquent d’utiliser la notation suivante pour définir le port :
const port = process.env.PORT || 3000;
Si une variable d’environnement PORT
est définie localement dans 📄 .env
, elle sera utilisée en premier lieu.
Si cette variable d’environnement n’est pas définie, alors le port 3000
sera défini par défaut.
En revanche, lorsque vous déploierez votre application sur une plateforme d’hébergement comme par exemple Vercel ou Netlify, la plateforme peut définir automatiquement une variable d’environnement appelée PORT
. Dans ce cas, process.env.PORT
prendra la valeur définie par la plateforme d’hébergement.
Cela permet une flexibilité lors du développement local et du déploiement sur différentes plates-formes (Heroku, Digital Ocean…), car le port peut être ajusté en fonction de l’environnement sans nécessiter des modifications directes dans le code.