Hier erfahren Sie, wie Sie Knotenumgebungsvariablen tatsächlich verwenden können

Umgebungsvariablen sind ein grundlegender Bestandteil der Knotenentwicklung, aber aus irgendeinem Grund habe ich mich nie darum gekümmert, zu lernen, wie man sie richtig verwendet.

Vielleicht, weil sie "Umgebungsvariablen" genannt werden.

Nur die Worte "Umgebungsvariable" lösen einen Rückblick auf PTBS aus, in dem ich versuche, den richtigen Pfad zum Java Home-Verzeichnis unter Windows hinzuzufügen. Geht es in PATH oder JAVA_HOME oder in beiden? Muss ich es mit einem Semikolon beenden? WARUM BENUTZE ICH JAVA?

In Node können Umgebungsvariablen global sein (wie unter Windows), werden jedoch häufig mit einem bestimmten Prozess verwendet, den Sie ausführen möchten. Wenn Sie beispielsweise eine Webanwendung hatten, verfügen Sie möglicherweise über Umgebungsvariablen, die Folgendes definieren:

  • Der HTTP-Port, den Sie abhören möchten
  • Die Datenbankverbindungszeichenfolge
  • Das JAVA_HOME… warte… nein - Entschuldigung. Der Heilungsprozess braucht Zeit.

In diesem Zusammenhang ähneln Umgebungsvariablen eher den „Konfigurationseinstellungen“. Sehen Sie, wie viel schöner das klingt?

Wenn Sie zuvor .NET ausgeführt haben, sind Sie möglicherweise mit einer web.configDatei vertraut . Knotenumgebungsvariablen funktionieren ähnlich wie Einstellungen in a web.config- sie bieten Ihnen die Möglichkeit, Informationen weiterzugeben, die Sie nicht hart codieren möchten.

Aber wie wollen Sie verwenden diese Variablen in der Knoten - Anwendung? Es fiel mir schwer, mit der erforderlichen Menge an Java-Witzen gute Ressourcen dafür zu finden, und ich entschied mich, einen zu erstellen. Hier sind einige der verschiedenen Möglichkeiten, wie Sie Umgebungsvariablen in Ihren Knotenanwendungen definieren und dann lesen können.

Übergeben Sie es im Terminal

Sie können Umgebungsvariablen als Teil Ihres Knotenprozesses auf dem Terminal übergeben. Wenn Sie beispielsweise eine Express-App ausführen und den Port übergeben möchten, können Sie dies folgendermaßen tun:

PORT=65534 node bin/www

Unterhaltsame Tatsache: Port 65535 ist der größte verfügbare TCP / IP-Netzwerkwert. Woher weiß ich das? StackOverflow natürlich. Woher weiß jemand etwas? Sie können für eine Web-App jedoch nur bis zu Port 65534 gehen, da dies der höchste Port ist, zu dem Chrome eine Verbindung herstellt. Woher weiß ich das? Weil Liran Tal es mir in den Kommentaren erzählt hat. Du solltest ihm folgen. Zwischen uns beiden ist er derjenige, der weiß, was er tut.

Um nun die Variable in Ihrem Code zu verwenden, würden Sie das process.envObjekt verwenden.

var port = process.env.PORT;

Aber das könnte hässlich werden. Wenn Sie eine Verbindungszeichenfolge hätten, würden Sie wahrscheinlich nicht mehrere Variablen auf dem Terminal übergeben wollen. Es sieht so aus, als würden Sie Konfigurationswerte horten, und jemand, der Sie liebt, könnte eine Intervention durchführen, und das wäre für alle Beteiligten unangenehm.

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"

Dies skaliert nicht und jeder möchte skalieren. Laut jedem Architekten, mit dem ich jemals in einer Besprechung gesessen habe, ist „Skalieren“ wichtiger als die Anwendung überhaupt.

Schauen wir uns also einen anderen Weg an: .env-Dateien.

Verwenden Sie eine .env-Datei

Mit .env-Dateien können Sie Ihre Umgebungsvariablen in eine Datei einfügen. Sie erstellen einfach eine neue Datei mit dem Namen .envin Ihrem Projekt und geben Ihre Variablen in verschiedene Zeilen ein.

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"

Um diese Werte zu lesen, gibt es einige Optionen. Am einfachsten ist es jedoch, das dotenvPaket ab npm zu verwenden.

npm install dotenv --save

Dann benötigen Sie dieses Paket nur in Ihrem Projekt, wo immer Sie Umgebungsvariablen verwenden müssen. Das dotenvPaket nimmt diese Datei auf und lädt diese Einstellungen in 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: Checken Sie Ihre .envDatei nicht in Github ein. Es enthält alle Ihre Geheimnisse und Github wird Ihnen eine E-Mail senden und Ihnen dies mitteilen. Sei nicht wie ich.

OK gut. Aber das ist eine Art Schmerz. Sie müssen dies in jede einzelne Datei einfügen, in der Sie Umgebungsvariablen verwenden möchten, UND Sie müssen die dotenvin der Produktion bereitstellen , in der Sie sie nicht wirklich benötigen. Ich bin kein großer Fan von sinnlosem Code, aber ich glaube, ich habe gerade meine gesamte Karriere beschrieben.

Glücklicherweise verwenden Sie VS-Code (weil Sie es natürlich sind ), sodass Sie einige andere Optionen haben.

Arbeiten mit .env-Dateien in VS Code

First off, you can install the DotENV extension for code which will give you nice syntax highlighting in your .env files.

DotENV - Visual Studio Marketplace

Extension for Visual Studio Code - Support for dotenv file syntax

marketplace.visualstudio.com

The VS Code Debugger also offers some more convenient options for loading values from .env files if you are using the VS Code Debugger.

VS Code Launch Configurations

The Node debugger for VS Code (already there, no need to install anything) supports loading in .env files via launch configurations. You can read more more about Launch Configurations here.

When you create a basic Node Launch Configuration (click on the gear and select Node), you can do one or both of two things.

The first is you can simply pass variables in on the launch config.

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

Jetzt wissen Sie, was ich weiß (was nicht viel ist, lassen Sie mich Ihnen sagen), und ich habe das Gefühl, mein Ziel einer geschmackvollen Menge von Java-Witzen auf dem Weg erreicht zu haben. Nur für den Fall, dass ich es nicht getan habe, werde ich dich mit diesem verlassen.

Java ist ein sehr leistungsfähiges Tool, um XML in Stack-Traces umzuwandeln

- Unbekannt

Satire-Haftungsausschluss: Das meiste davon ist ein schlechter Versuch des Humors, und einiges davon auf Kosten von Java; Das ist nicht schön, aber sehr einfach. Diese Witze schreiben sich nicht selbst.