Ara que ja hem vist com modularizar el nostre codi en projectes Node, explicarem una altra bona pràctica de programació que també podem dur a terme en els nostres desenvolupaments: emmagatzemar en variables d’entorn els paràmetres que siguen configurables en un projecte.
Per exemple, el port pel qual posem en marxa un servidor, o la direcció de connexió a una base de dades poden variar depenent d’on despleguem l’aplicació. En lloc d’estar canviant el codi font dels nostres projectes en cada punt on els despleguem, podem deixar en un fitxer de text tots estos paràmetres, i referenciar-los des del programa.
El fitxer .env és un fitxer de configuració de variables d’entorn (environment) que s’està fent cada vegada més popular en diferents frameworks de desenvolupament. Per exemple, imaginem que volem guardar en aquest fitxer el port de connexió i el login de l’usuari de la base de dades. El contingut del fitxer .env podria ser una cosa així:
PORT = 8080
LOGIN_BD = usu1
Este fitxer .env es col·loca en la carpeta arrel del nostre projecte, i a continuació veurem com accedir a ell.
Existeixen diferents maneres de gestionar les variables emmagatzemades en el fitxer .env. Ací explicarem dos d’elles.
La llibreria dotenv és una popular llibreria la principal missió de la qual és just esta, carregar i accedir al contingut del fitxer .env (llegit en anglés dot env). El seu ús és molt senzill: s’instal·la amb el corresponent comando npm install
i després es carrega en els fitxers on necessitem utilitzar el contingut de .env. Finalment, usant el seu mètode config
carreguem el contingut del fitxer, i el tindrem disponible en la variable process.env
.
Si, per exemple, volem recuperar el port de connexió emmagatzemat en la variable d’entorn PORT de l’exemple anterior, bastaria amb una cosa així:
const dotenv = require("dotenv");
dotenv.config();
// Ací ja tenim carregades les variables d'entorn del fitxer
console.log("Port de connexió:", process.env.PORT);
A partir de la versió 20 de Node.js ja s’incorpora esta funcionalitat en el propi nucli del framework, amb el que no és necessari acudir a la llibreria dotenv vista anteriorment. Si directament posem process.env.X
podrem accedir al contingut de la variable X, definida en el fitxer .env.
Igual que ocorre amb la carpeta node_modules, no és bona idea distribuir el fitxer .env amb la resta del projecte, ja que pot contindre informació sensible que no hauria de ser accessible per qualsevol. Per este motiu, no és recomanable pujar este fitxer a repositoris GitHub, i es recomana crear un fitxer propi en cada sistema on despleguem el projecte.
Així doncs, el nostre fitxer .gitignore
podria tindre este contingut per als nostres projectes Node:
node_modules
.env