Apprendre Node.js : Fichier .env

Présent à la racine de la plupart des projets Node.js, le fichier .env permet de définir des variables d'environnement.

Icône de calendrier
Intermédiaire
7 chapitres

À 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.

.env
copié !
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 et DB_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 et SMTP_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.

copié !
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 :

copié !
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 :

copié !
npm install dotenv

Déclaration des variables

Déclarons par exemple une variable d’environnement BASE_URL :

.env
copié !
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 :

copié !
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_VARIABLEMA_VARIABLE est le nom de la variable que vous avez définie dans votre fichier .env.

index.js
copié !
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 :

copié !
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.