Así es como puede usar las variables de entorno de Node

Las variables de entorno son una parte fundamental del desarrollo de Node, pero por alguna razón nunca me molesté en aprender a usarlas correctamente.

Quizás porque se llaman "Variables de entorno".

Solo las palabras "Variable de entorno" desencadenan un flashback con PTSD en el que estoy tratando de agregar la ruta correcta al directorio de inicio de Java en Windows. ¿Va en PATH o JAVA_HOME o en ambos? ¿Necesito terminarlo con un punto y coma? ¿POR QUÉ ESTOY UTILIZANDO JAVA?

En Node, las variables de entorno pueden ser globales (como en Windows), pero a menudo se usan con un proceso específico que desea ejecutar. Por ejemplo, si tuviera una aplicación web, podría tener variables de entorno que definan:

  • El puerto HTTP para escuchar
  • La cadena de conexión de la base de datos
  • El JAVA_HOME ... espera ... no - lo siento. El proceso de curación lleva tiempo.

En este contexto, las variables de entorno se parecen más a "Ajustes de configuración". ¿Ves cuánto mejor suena eso?

Si ha hecho .NET antes, es posible que esté familiarizado con algo como un web.configarchivo. Las variables de entorno de nodo funcionan de la misma manera que las configuraciones en a web.config: son una forma de pasar información que no desea codificar.

Pero, ¿cómo usa estas variables en su aplicación Node? Me costó encontrar buenos recursos sobre esto con la cantidad necesaria de chistes de Java, así que decidí crear uno. Estas son algunas de las diferentes formas en que puede definir y luego leer las variables de entorno en sus aplicaciones de Node.

Pásalo en la terminal

Puede pasar variables de entorno en la terminal como parte de su proceso de nodo. Por ejemplo, si estuviera ejecutando una aplicación Express y quisiera pasar el puerto, podría hacerlo así ...

PORT=65534 node bin/www

Dato curioso: el puerto 65535 es el valor de red TCP / IP más grande disponible. ¿Cómo sé eso? StackOverflow, por supuesto. ¿Cómo sabe alguien algo? Pero solo puede ir tan alto como el puerto 65534 para una aplicación web porque ese es el puerto más alto al que se conectará Chrome. ¿Cómo lo sé ? Porque Liran Tal me lo dijo en los comentarios. Deberías seguirlo. Entre los dos, él es el que sabe lo que hace.

Ahora, para usar la variable en su código, usaría el process.envobjeto.

var port = process.env.PORT;

Pero esto podría ponerse feo. Si tuviera una cadena de conexión, probablemente no querría comenzar a pasar múltiples variables en la terminal. Parecería que está acumulando valores de configuración, y alguien que lo ama podría organizar una intervención y eso sería incómodo para todos los involucrados.

PORT=65534 DB_CONN="mongodb://react-cosmos-db:swQOhAsVjfHx3Q9V[email protected]react-cosmos-db.documents.azure.com:10255/?ssl=true&replicaSet=globaldb" SECRET_KEY="b6264fca-8adf-457f-a94f-5a4b0d1ca2b9"

Esto no se escala y todos quieren escalar. Según todos los arquitectos con los que me he reunido, "escalar" es más importante que que la aplicación funcione.

Así que veamos otra forma: archivos .env.

Utilice un archivo .env

Los archivos .env le permiten poner sus variables de entorno dentro de un archivo. Simplemente crea un nuevo archivo llamado .enven su proyecto y coloca sus variables allí en diferentes líneas.

PORT=65534 DB_CONN="mongodb://react-cosmos-db:swQOhAsVjfHx3Q9V[email protected]react-cosmos-db.documents.azure.com:10255/?ssl=true&replicaSet=globaldb" SECRET_KEY="b6264fca-8adf-457f-a94f-5a4b0d1ca2b9"

Para leer estos valores, hay un par de opciones, pero la más fácil es usar el dotenvpaquete de npm.

npm install dotenv --save

Entonces solo necesita ese paquete en su proyecto siempre que necesite usar variables de entorno. El dotenvpaquete recogerá ese archivo y cargará esa configuración en Node.

Use dotenv to read .env vars into Node require('dotenv').config(); var MongoClient = require('mongodb').MongoClient; // Reference .env vars off of the process.env object MongoClient.connect(process.env.DB_CONN, function(err, db) { if(!err) { console.log("We are connected"); } });

PROTIP: No revise su .envarchivo en Github. Tiene todos tus secretos y Github te enviará un correo electrónico y te lo dirá. No seas como yo.

Ok, perfecto. Pero esto es un poco doloroso. Tienes que poner esto en cada archivo donde quieras usar variables de entorno Y tienes que implementarlo dotenven producción donde realmente no lo necesitas. No soy un gran fanático de la implementación de código inútil, pero supongo que acabo de describir toda mi carrera.

Afortunadamente, está utilizando VS Code (porque, por supuesto, lo está ), por lo que tiene otras opciones.

Trabajar con archivos .env en VS Code

En primer lugar, puede instalar la extensión DotENV para el código que le dará un buen resaltado de sintaxis en sus archivos .env.

DotENV - Mercado de Visual Studio

Extensión para Visual Studio Code: compatibilidad con la sintaxis de archivos dotenv

marketplace.visualstudio.com

VS Code Debugger también ofrece algunas opciones más convenientes para cargar valores desde archivos .env si está utilizando VS Code Debugger.

Configuraciones de lanzamiento de código VS

El depurador de nodo para VS Code (ya está allí, no es necesario instalar nada) admite la carga de archivos .env a través de configuraciones de inicio. Puede leer más sobre las configuraciones de lanzamiento aquí.

Cuando crea una configuración básica de lanzamiento de nodo (haga clic en el engranaje y seleccione Nodo), puede hacer una o dos cosas.

La primera es que simplemente puede pasar variables en la configuración de inicio.

This is nice, but the fact that every value has to be a string bothers me a bit. It’s a number, not a string. JavaScript only has, like, 3 types. Don’t take one of them away from me.

There is a simpler way here. We’ve already learned to love .env files, so instead of passing them, we can just give VS Code the name of the .env file.

And as long as we are starting our process from VS Code, environment variables files are loaded in. We don’t have to mutilate numbers into strings and we aren’t deploying worthless code into production. Well, at least you aren’t.

Starting with NPM instead of Node

You might have gotten this far and thought, “Burke, I never ever run node anything. It’s always an npm script like npm start”.

In this case you can still use VS Code Launch configs. Instead of using a standard Node Launch process, you add a config that is a “Launch Via NPM” task.

Now you can add back in your envFile line and tweak the runtimeArgs so that they launch the correct script. This is usually something like “start” or “debug”.

Note that you have to add the --inspect flag to your npm script so that VS Code can attach the debugger. Otherwise the task will launch, but the VS Code debugger will time out like me trying to get a date in high school.

Production environment variables

So far we’ve looked at how to define variables for development. You likely won’t use .env files in production, and VS Code Launch Configurations aren’t going to be super helpful on a server.

In production, variables will be defined however your platform of choice allows you to do so. In the case of Azure, there are 3 different ways to define and manage environment variables.

The first way is to use the Azure CLI.

az webapp config appsettings set -g MyResourceGroup -n MyApp --settings PORT=65534

Which works, but, ew.

Another way is via the Azure web portal. I don’t always use a web portal, but when I do, it’s to set environment variables.

In the case of Azure, these are called “Application Settings”.

And since you are using VS Code, you can install the App Service extension and manage all the App Settings right from the editor.

I love not having to leave VS Code to do anything. I would write emails in VS Code if I could.

WAIT A MINUTE!

markdown-mail - Visual Studio Marketplace

Extension for Visual Studio Code - Using markdown to write your email and send!

marketplace.visualstudio.com

Now you know

Ahora sabes lo que sé (que no es mucho, déjame decirte) y siento que logré mi objetivo de una buena cantidad de chistes de Java en el camino. En caso de que no lo haya hecho, te dejo con este.

Java es una herramienta muy poderosa para convertir XML en rastros de pila

- Desconocido

Descargo de responsabilidad sobre la sátira: La mayor parte de esto es un mal intento de humor, y parte de él a expensas de Java; que no es agradable pero es muy fácil. Estos chistes no se escriben solos.