610 Stimmen

Wie werden Umgebungsvariablen innerhalb der package.json festgelegt?

Wie können einige Umgebungsvariablen innerhalb von package.json festgelegt werden, um sie mit Befehlen wie npm start zu verwenden?

Hier ist, was ich derzeit in meinem package.json habe:

{
  ...
  "scripts": {
    "help": "tagove help",
    "start": "tagove start"
  }
  ...
}

Ich möchte Umgebungsvariablen (wie NODE_ENV) im Start-Skript festlegen und dennoch die App mit nur einem Befehl, npm start, starten können.

751voto

cesar Punkte 9558

Setzen Sie die Umgebungsvariable im Skriptbefehl:

...
"scripts": {
  "start": "node app.js",
  "test": "NODE_ENV=test mocha --reporter spec"
},
...

Verwenden Sie dann process.env.NODE_ENV in Ihrer App.

Hinweis: Dies gilt nur für Mac & Linux. Für Windows siehe die Kommentare.

386voto

TetraDev Punkte 14424

Nur das NPM-Paket cross-env verwenden. Super einfach. Funktioniert auf Windows, Linux und allen Umgebungen. Beachten Sie, dass Sie kein && verwenden, um zum nächsten Task zu wechseln. Sie setzen einfach die Umgebung und starten dann den nächsten Task. Dank an @mikekidder für den Vorschlag in einem der Kommentare hier .

Aus der Dokumentation:

{
  "scripts": {
    "build": "cross-env NODE_ENV=production OTHERFLAG=myValue webpack --config build/webpack.config.js"
  }
}

Beachten Sie, dass wenn Sie mehrere globale Variablen setzen möchten, geben Sie sie einfach nacheinander an, gefolgt von Ihrem auszuführenden Befehl.

Letztendlich wird der (mit spawn ausgeführte) Befehl sein:

webpack --config build/webpack.config.js

Die Umgebungsvariable NODE_ENV wird von cross-env gesetzt

90voto

Luke Punkte 16552

Weil ich häufig mit mehreren Umgebungsvariablen arbeite, finde ich es nützlich, sie in einer separaten .env-Datei aufzubewahren (stellen Sie sicher, dass Sie dies aus Ihrer Quellkontrolle ignorieren). Dann (in Linux) fügen Sie export $(cat .env | xargs) && in Ihren Skriptbefehl ein, bevor Sie Ihre App starten.

Beispiel einer .env-Datei:

VAR_A=Hallo Welt
VAR_B=formatieren Sie die .env-Datei auf diese Weise mit neuen Variablen, die durch einen Zeilenumbruch getrennt sind

Beispiel index.js:

console.log('Test', process.env.VAR_A, process.env.VAR_B);

Beispiel package.json:

{
  ...
  "scripts": {
    "start": "node index.js",

    "env-linux": "export $(cat .env | xargs) && env",
    "start-linux": "export $(cat .env | xargs) && npm start",

    "env-windows": "(for /F \"tokens=*\" %i in (.env) do set %i)",
    "start-windows": "(for /F \"tokens=*\" %i in (.env) do set %i) && npm start",

  }
  ...
}

Leider scheint es mir nicht möglich zu sein, die Umgebungsvariablen durch Aufruf eines Skripts aus einem Skript heraus zu setzen - wie "start-windows": "npm run env-windows && npm start" - daher gibt es Redundanz in den Skripts.

Zum Testen können Sie die Umgebungsvariablen anzeigen, indem Sie npm run env-linux oder npm run env-windows ausführen, und prüfen, ob sie in Ihre App übernommen werden, indem Sie npm run start-linux oder npm run start-windows ausführen.

83voto

TeemuK Punkte 1795

Ich wollte nur meine zwei Cent hier für zukünftige Node-Entdecker hinzufügen. Auf meinem Ubuntu 14.04 hat NODE_ENV=test nicht funktioniert, ich musste export NODE_ENV=test verwenden, nachdem NODE_ENV=test dann auch funktioniert hat, seltsam.

Auf Windows, wie bereits gesagt wurde, muss man set NODE_ENV=test verwenden, aber für eine plattformübergreifende Lösung schien die cross-env-Bibliothek nicht zu funktionieren, und braucht man wirklich eine Bibliothek dafür:

export NODE_ENV=test || set NODE_ENV=test&& yadda yadda

Die senkrechten Striche sind notwendig, da Windows sonst beim nicht erkannten export NODE_ENV Befehl abstürzen würde. Was das Leerzeichen am Ende betrifft, weiß ich nicht genau, aber um sicher zu gehen habe ich sie auch entfernt.

43voto

Pascal Mayr Punkte 539

Versuche dies unter Windows, indem du YOURENV ersetzt:

  {
    ...
     "scripts": {
       "help": "set NODE_ENV=YOURENV && tagove help",
       "start": "set NODE_ENV=YOURENV && tagove start"
     }
    ...
  }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X