Voici comment vous pouvez réellement utiliser les variables d'environnement Node

Les variables d'environnement sont une partie fondamentale du développement de Node, mais pour une raison quelconque, je n'ai jamais pris la peine d'apprendre à les utiliser correctement.

Peut-être parce qu'elles sont appelées «variables d'environnement».

Seuls les mots «Variable d'environnement» déclenchent un flashback lié au PTSD dans lequel j'essaie d'ajouter le chemin correct au répertoire Java Home sur Windows. Cela va-t-il dans PATH ou JAVA_HOME ou les deux? Dois-je le terminer par un point-virgule? POURQUOI J'UTILISE JAVA?

Dans Node, les variables d'environnement peuvent être globales (comme sous Windows), mais sont souvent utilisées avec un processus spécifique que vous souhaitez exécuter. Par exemple, si vous aviez une application Web, vous pourriez avoir des variables d'environnement qui définissent:

  • Le port HTTP sur lequel écouter
  • La chaîne de connexion à la base de données
  • Le JAVA_HOME… attendez… non - désolé. Le processus de guérison prend du temps.

Dans ce contexte, les variables d'environnement ressemblent davantage à des "Paramètres de configuration". Vous voyez à quel point cela sonne mieux?

Si vous avez déjà utilisé .NET, vous connaissez peut-être quelque chose comme un web.configfichier. Les variables d'environnement de nœud fonctionnent à peu près de la même manière que les paramètres dans un web.config- elles vous permettent de transmettre des informations que vous ne souhaitez pas coder en dur.

Mais comment voulez - vous utiliser ces variables dans votre application Node? J'ai eu du mal à trouver de bonnes ressources à ce sujet avec la quantité requise de blagues Java, alors j'ai décidé d'en créer une. Voici quelques-unes des différentes manières de définir puis de lire les variables d'environnement dans vos applications Node.

Passez-le dans le terminal

Vous pouvez transmettre des variables d'environnement sur le terminal dans le cadre de votre processus Node. Par exemple, si vous exécutiez une application Express et que vous vouliez passer dans le port, vous pourriez le faire comme ceci ...

PORT=65534 node bin/www

Fait amusant: le port 65535 est la plus grande valeur de réseau TCP / IP disponible. Comment le sais-je? StackOverflow bien sûr. Comment quelqu'un sait-il quelque chose? Mais vous ne pouvez aller aussi haut que le port 65534 pour une application Web, car c'est le port le plus élevé auquel Chrome se connectera. Comment le sais-je ? Parce que Liran Tal me l'a dit dans les commentaires. Tu devrais le suivre. Entre nous deux, c'est lui qui sait ce qu'il fait.

Maintenant, pour utiliser la variable dans votre code, vous utiliseriez l' process.envobjet.

var port = process.env.PORT;

Mais cela pourrait devenir moche. Si vous aviez une chaîne de connexion, vous ne voudriez probablement pas commencer à passer plusieurs variables sur le terminal. Il semblerait que vous accumuliez des valeurs de configuration, et quelqu'un qui vous aime pourrait organiser une intervention, ce qui serait gênant pour toutes les personnes impliquées.

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"

Cela ne s'adapte pas et tout le monde veut évoluer. Selon tous les architectes avec lesquels j'ai participé à une réunion, la «mise à l'échelle» est plus importante que l'application ne fonctionne même.

Alors regardons une autre façon: les fichiers .env.

Utilisez un fichier .env

Les fichiers .env vous permettent de placer vos variables d'environnement dans un fichier. Vous créez simplement un nouveau fichier appelé .envdans votre projet et appliquez vos variables sur différentes lignes.

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"

Pour lire ces valeurs, il existe quelques options, mais la plus simple est d'utiliser le dotenvpackage de npm.

npm install dotenv --save

Ensuite, vous avez simplement besoin de ce package dans votre projet partout où vous devez utiliser des variables d'environnement. Le dotenvpackage récupérera ce fichier et chargera ces paramètres dans 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: ne archivez pas votre .envfichier dans Github. Il contient tous vos secrets et Github vous enverra un e-mail pour vous le dire. Ne sois pas comme moi.

OK bien. Mais c'est une sorte de douleur. Vous devez le mettre dans chaque fichier où vous souhaitez utiliser des variables d'environnement ET vous devez déployer le dotenven production là où vous n'en avez pas réellement besoin. Je ne suis pas un grand fan du déploiement de code inutile, mais je suppose que je viens de décrire toute ma carrière.

Heureusement, vous utilisez VS Code (parce que vous l'êtes bien sûr ), vous avez donc d'autres options.

Travailler avec des fichiers .env dans VS Code

Tout d'abord, vous pouvez installer l'extension DotENV pour le code qui vous donnera une belle coloration syntaxique dans vos fichiers .env.

DotENV - Marché Visual Studio

Extension pour Visual Studio Code - Prise en charge de la syntaxe de fichier dotenv

marketplace.visualstudio.com

Le débogueur de code VS offre également des options plus pratiques pour charger des valeurs à partir de fichiers .env si vous utilisez le débogueur de code VS.

Configurations de lancement de code VS

Le débogueur Node pour VS Code (déjà là, pas besoin d'installer quoi que ce soit) prend en charge le chargement de fichiers .env via des configurations de lancement. Vous pouvez en savoir plus sur les configurations de lancement ici.

Lorsque vous créez une configuration de lancement de nœud de base (cliquez sur l'engrenage et sélectionnez Node), vous pouvez faire une ou deux choses.

La première est que vous pouvez simplement passer des variables dans la configuration de lancement.

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

Maintenant vous savez ce que je sais (ce qui n'est pas beaucoup, laissez-moi vous dire) et j'ai l'impression d'avoir atteint mon objectif d'une quantité de bon goût de blagues Java en cours de route. Juste au cas où je ne le ferais pas, je vous laisse avec celui-ci.

Java est un outil très puissant pour transformer XML en traces de pile

- Inconnue

Avis de non-responsabilité Satire: La plupart de ceci est une mauvaise tentative d'humour, et une partie au détriment de Java; ce qui n'est pas agréable mais est très facile. Ces blagues ne s’écrivent pas d’elles-mêmes.