Zur Verwendung in express.js-Umgebungen. Irgendwelche Vorschläge?
Zur Verwendung in express.js-Umgebungen. Irgendwelche Vorschläge?
Antworten:
Bevor Sie Ihre App ausführen, können Sie dies in der Konsole tun.
export NODE_ENV=production
Oder wenn Sie in Windows sind, können Sie dies versuchen:
SET NODE_ENV=production
oder Sie können Ihre App folgendermaßen ausführen:
NODE_ENV=production node app.js
Sie können es auch in Ihrer js-Datei festlegen:
process.env.NODE_ENV = 'production';
Ich empfehle jedoch nicht, dies in Ihrer Laufzeitdatei zu tun, da es nicht einfach ist, VIM auf Ihrem Server zu öffnen und auf Produktion umzustellen. Sie können eine config.json-Datei in Ihrem Verzeichnis erstellen. Jedes Mal, wenn Ihre App ausgeführt wird, liest sie daraus und legt die Konfiguration fest.
process.env.NODE_ENV
zuverlässig über die App selbst vorzunehmen. Stellen Sie Ihre Umgebungsvariable am besten richtig ein, wie Daniel unten verlinkt hat.
NODE_ENV
expliziten Einstellungen jedes Mal, wenn Sie die App ausführen, wie im zweiten Beispiel ( NODE_ENV=production node app.js
). Auf diese Weise ersparen Sie sich möglicherweise ein paar zukünftige Haarsträhnen, falls Sie vergessen, Ihren lokalen Standort NODE_ENV
zurückzusetzen development
.
cross-env NODE_ENV=production
funktioniert unter Windows und Linux / Mac.
NODE_ENV=production forever app.js
sollte funktionieren.
in package.json:
{
...
"scripts": {
"start": "NODE_ENV=production node ./app"
}
...
}
dann im Terminal ausführen:
npm start
NODE_ENV=production
Einfügen von package.json macht wenig Sinn. Wenn Sie npm start
in der Entwicklung arbeiten, wird es in der Produktion ausgeführt. Sie können Ihren Code so schreiben, als wäre er immer eine Produktion, da Sie ihn immer so ausführen. Der einzige Grund, warum ich dies sehe, besteht darin, andere Module (z. B. Express) zu zwingen, im Produktionsmodus ausgeführt zu werden. Warum überhaupt Umgebungsvariablen verwenden, wenn sie sich nie ändern?
.env
Hier noch niemand erwähnt ? Erstellen Sie dann eine .env
Datei in Ihrem App-Stammverzeichnis require('dotenv').config()
und lesen Sie die Werte. Leicht zu ändern, leicht zu lesen, plattformübergreifend.
"mode": "production"
in der .env
Datei funktioniert.
export NODE_ENV=production
ist eine schlechte Lösung, sie verschwindet nach dem Neustart.
Wenn Sie sich nicht mehr um diese Variable kümmern möchten, fügen Sie sie dieser Datei hinzu:
/etc/environment
Verwenden Sie keine Exportsyntax, schreiben Sie einfach (in eine neue Zeile, wenn bereits Inhalte vorhanden sind):
NODE_ENV=production
es funktioniert nach dem Neustart. Sie müssen den Befehl export NODE_ENV = Production nirgendwo mehr erneut eingeben und den Knoten nur mit allem verwenden, was Sie möchten - für immer, pm2 ...
Für Heroku:
heroku config:set NODE_ENV="production"
Das ist eigentlich Standard.
NODE_ENV=production gulp bundle-production-app
es, um ein produktionsfertiges Skript zu bündeln. Auf dem Server befindet sich NODE_ENV in der Serverumgebung und auf dem Dev-Computer nicht. In einigen Maschinen ist es ein Albtraum, wenn es nicht eingestellt ist und Sie erwarten, dass es immer eingestellt ist . In einigen Fällen erwarten Sie, dass Sie es nicht haben, also fügen Sie es nicht hinzu. Wie auch immer, während ich Benutzeroberflächen mache, mache ich klar, ob es sich im Entwicklungsmodus befindet, so dass Sie nie eine Frage haben, ob es ein- oder ausgeschaltet ist. Wenn NODE_ENV! == Produktion ist, ist es in Ihrem Gesicht, dass Sie sich in einem anderen Modus befinden, also überhaupt kein Albtraum. Alles klar, alles gut.
/etc/environment
und ausführen export NODE_ENV=production
?
Um sich keine Sorgen machen zu müssen, ob Sie Ihre Skripte unter Windows, Mac oder Linux ausführen, installieren Sie das Cross-Env- Paket. Dann können Sie Ihre Skripte einfach verwenden, wie folgt:
"scripts": {
"start-dev": "cross-env NODE_ENV=development nodemon --exec babel-node -- src/index.js",
"start-prod": "cross-env NODE_ENV=production nodemon --exec babel-node -- src/index.js"
}
Massive Requisiten an die Entwickler dieses Pakets.
npm install --save-dev cross-env
heroku config:set NODE_ENV="production"
NODE_ENV=production
ist jetzt die Standardeinstellung in Heroku node.js.
Verwenden Sie für Windows Powershell diesen Befehl
$env:NODE_ENV="production" ; node app.js
Unter OSX würde ich empfehlen, export NODE_ENV=development
zu Ihrem ~/.bash_profile
und / oder ~/.bashrc
und / oder hinzuzufügen ~/.profile
.
Persönlich füge ich diesen Eintrag zu meinem hinzu ~/.bashrc
und habe dann den~/.bash_profile
~/.profile
lasse dann den Inhalt dieser Datei importieren, damit er in allen Umgebungen konsistent ist.
Stellen Sie nach diesen Ergänzungen sicher, dass Sie Ihr Terminal neu starten, um die Einstellungen zu übernehmen.
Wenn Sie unter Windows sind. Öffnen Sie dann zuerst Ihren cmd im rechten Ordner
set node_env={your env name here}
Drücken Sie die Eingabetaste, dann können Sie Ihren Knoten mit starten
node app.js
Es beginnt mit Ihrer Env-Einstellung
Um mehrere Umgebungen zu haben, benötigen Sie alle Antworten zuvor (NODE_ENV-Parameter und exportieren Sie ihn), aber ich verwende einen sehr einfachen Ansatz, ohne etwas installieren zu müssen. Fügen Sie in Ihre package.json einfach ein Skript für jede Umgebung ein, die Sie benötigen, wie folgt:
...
"scripts": {
"start-dev": "export NODE_ENV=dev && ts-node-dev --respawn --transpileOnly ./src/app.ts",
"start-prod": "export NODE_ENV=prod && ts-node-dev --respawn --transpileOnly ./src/app.ts"
}
...
Starten Sie dann die App, anstatt sie zu npm start
verwenden npm run script-prod
.
Im Code können Sie mit auf die aktuelle Umgebung zugreifen process.env.NODE_ENV
.
Voila.
Windows CMD -> set NODE_ENV=production
Windows Powershell -> $env:NODE_ENV="production"
MAC -> export NODE_ENV=production
Daniel hat eine fantastische Antwort, die der bessere Ansatz für den richtigen Bereitstellungsprozess (Setzen und Vergessen) ist.
Für diejenigen, die Express verwenden. Sie können den Grunt-Express-Server verwenden, der ebenfalls fantastisch ist. https://www.npmjs.org/package/grunt-express-server
Möglicherweise haben Sie zwei Instanzen eines Folgeobjekts erstellt
zum Beispiel: var con1 = new Sequelize (); var con2 = new Sequelize ();
dann tritt auch der gleiche Fehler auf