Las variables de entorno son fundamentales en el desarrollo de aplicaciones Node.js, permitiendo configurar diferentes aspectos de nuestra aplicación según el entorno en que se ejecute. En este artículo, exploraremos cómo implementar y gestionar variables de entorno en una aplicación Node.js, así como algunas buenas prácticas para optimizar nuestro flujo de trabajo de desarrollo.
¿Cómo configurar variables de entorno en Node.js?
Cuando desarrollamos aplicaciones en Node.js, es común necesitar diferentes configuraciones según el entorno (desarrollo, pruebas, producción). Las variables de entorno nos permiten manejar estas configuraciones de manera eficiente.
En nuestro ejemplo, estamos configurando el puerto en el que se ejecutará nuestra aplicación:
require('dotenv').config();const port = process.env.PORT||3000;console.log(port);// Resto del código de la aplicación
Es importante destacar que algunas variables tendrán valores por defecto (como en el caso del puerto que usa 3000 si no se especifica otro), mientras que otras no deberían tener valores predeterminados para no perder su propósito.
Instalación y uso de dotenv
Para que nuestra aplicación pueda leer las variables definidas en un archivo .env, necesitamos instalar el paquete dotenv:
npminstall dotenv
Una vez instalado, debemos importarlo y configurarlo al inicio de nuestra aplicación:
require('dotenv').config();
Este paquete carga automáticamente las variables definidas en el archivo .env y las hace disponibles a través del objeto process.env.
¿Cómo optimizar el flujo de trabajo en desarrollo?
Cuando trabajamos en desarrollo, es común realizar cambios frecuentes en nuestro código. Para facilitar este proceso, podemos configurar scripts en nuestro archivo package.json.
Ejecutar la aplicación en modo desarrollo con cambios en tiempo real: npm run dev
Iniciar la aplicación en modo producción: npm start
Estos scripts simplifican los comandos repetitivos y estandarizan la forma de ejecutar la aplicación en diferentes entornos.
Consideraciones importantes sobre las variables de entorno
Es fundamental entender que:
Los cambios en las variables de entorno requieren reiniciar la aplicación - Node.js no detecta automáticamente estos cambios mientras se ejecuta.
Para ver los cambios en las variables de entorno, debemos:
Detener la ejecución actual
Realizar los cambios necesarios
Reiniciar la aplicación
¿Qué mejoras podemos implementar en nuestra aplicación?
Para mejorar la experiencia de desarrollo, podemos agregar mensajes informativos que faciliten el acceso a nuestra aplicación:
app.listen(port,()=>{console.log(`Servidor corriendo en http://localhost:${port}`);});
Este mensaje en la consola nos permite:
Confirmar que la aplicación se está ejecutando correctamente
Acceder rápidamente a la aplicación haciendo clic en el enlace (en terminales modernas)
Verificar en qué puerto está escuchando nuestra aplicación
Estas pequeñas mejoras hacen que el proceso de desarrollo sea más fluido y menos propenso a errores.
Las variables de entorno son una herramienta poderosa para gestionar configuraciones en diferentes entornos. Implementarlas correctamente, junto con buenas prácticas de desarrollo como scripts personalizados, mejora significativamente nuestro flujo de trabajo. Te animamos a experimentar con estas técnicas en tus proyectos y compartir tus experiencias en la sección de comentarios.
También podemos usar el flag --env-file file.extension para usar variables de entorno sin librerías externas: node --env-file .env --watch app.js
Gracias por esta recomendación!
jejee ese es el comando que utilizo para las variables de entorno a la misma vez escuchar cambios en app.js, pero uso un script " npm start" que configure en el package.json
¡Hola! Yo uso WSL, y estuve un rato largo investigando sobre por qué no me recargaba con el --watch en mi terminal, incluso probé con nodemon pero no me funcionaba; pero ya encontré la solución así que comparto mi aporte 💻💚:
Si estás usando Windows con WSL, y tienes el directorio de tu proyecto en el sistema de Windows (como normalmente lo guardarías) el --watch o nodemon no funciona, porque WSL no puede acceder de manera tan eficiente a los archivos de windows y sus actualizaciones.
Para esto hay dos soluciones:
Usas la terminal de Windows para ejecutar tu proyecto con el watch, pero en esta solución pues obviamente ya no podríamos usar Linux.
Mover el proyecto a nuestra carpeta de usuario de nuestra distribución de Linux: En esta solución pues podemos usar el explorador de archivo de Windows, y buscar la carpeta de linux/home/tu-nombre-usuario, y ahí colocar nuestro proyecto (aunque lo óptimo es mover el proyecto usando comandos). Al estar dentro de Linux si va a poder detectar los cambios automáticamente.
¡Espero les sirva! 🚀
Muchas gracias por tu aporte, ya me habi resignado al segundo intento que andaba con mala suerte. Gracias.
Mis apuntes en notion 🤓
profee yo hago el node --watch app.js pero no se refresca solo.. que puede estar pasando ???
tengo la version 22
La explicación de las variables de entorno es un poco vaga (a mi parecer).
Node tiene un objeto global llamado process que contiene información del proceso que se esta ejecutando en ese momento.
Dentro de process, existe una propiedad llamada env (de environment). Node.js llena automáticamente este objeto con todas las variables de entorno que detecta en el sistema.
Configurar variables manualmente en el SO para cada proyecto puede ser tedioso, aquí entra dotenv.
PORT=4321 node app.js
<u>El archivo .env no es algo de node, es de una dependencia de node.</u>
dotenv te permite crear un archivo llamado .env en la raíz de tu proyecto. En ese archivo escribes tus variables como si fueran una lista de compras.
Cuando ejecutas tu aplicación y llamas a dotenv, la librería lee ese archivo y carga esos valores dentro de process.env automáticamente.
Entender esto es fundamental.
Siempre he tenido preguntas en cuanto a las variables de entorno. Sí entiendo qué son las variables de entorno y que deben guardarse en el backend. Se supone que ninguna variable de entorno debe mostrarse en el lado del cliente.
Pero para poder conectarnos a nuestro backend —o a otra parte importante— desde el cliente, estamos utilizando una variable. Lo que no logro entender es: si esa variable de entorno está del lado del cliente, aunque desde el backend haya restricciones para solo escucharla, ¿eso no compromete nuestras credenciales? ¿No es un riesgo el simple hecho de estarla utilizando desde el cliente?
esas variable de entorno no estan del lado del cliente, estan del lado del servidor solo que debes cuidar que tu .env no se suba a un repositorio asi que tu .gitignore debes tener ese .env para que lo ignore. para un mayor nivel de seguridad que usar un .env puedes usar secrets de k8 o docker swarm que le dan un mayor nivel de seguridad
Esas variables de entorno estan del lado del cliente, estan en el servidor.
Y mas aun: en el servidor solo estan en el ambiente del proceso que este corriendo la aplicacion de nodejs.
yo corro el curso en una maquina virtual, me logeo y no me muestra la variable PORT:
Es necesario usar Dotenv hoy en dia? tengo entendido que ya viene con soporte nativo hoy en dia