Führen Sie Skripte aus, die Umgebungsvariablen auf Plattformen festlegen und verwenden
Beachten Sie: Cross-Env funktioniert immer noch gut, befindet sich jedoch im Wartungsmodus. Es werden keine neuen Funktionen hinzugefügt, nur schwerwiegende und Common-Case-Fehler werden behoben, und sie werden im Laufe der Zeit nur mit Node.js auf dem Laufenden gehalten. Erfahren Sie mehr
Die meisten Windows -Eingabeaufforderungen ersticken, wenn Sie Umgebungsvariablen mit einer solchen NODE_ENV=production festlegen. (Die Ausnahme ist Bash unter Windows, das native Bash verwendet.) In ähnlicher Weise gibt es einen Unterschied darin, wie Windows- und POSIX -Befehle Umgebungsvariablen verwenden. Mit POSIX verwenden Sie: $ENV_VAR und unter Windows, die Sie %ENV_VAR% verwenden.
cross-env macht es so, dass Sie einen einzelnen Befehl haben können, ohne sich um die Einstellung oder Verwendung der Umgebungsvariablen für die Plattform zu sorgen. Stellen Sie es einfach so ein, wie Sie es tun würden, wenn es auf einem POSIX-System ausgeführt wird, und cross-env kümmert sich um ordnungsgemäß.
cross-env gegen cross-env-shell Dieses Modul wird über NPM verteilt, das mit Knoten gebündelt ist und als eine der devDependencies Ihres Projekts installiert werden sollte:
npm install --save-dev cross-env
WARNUNG! Stellen Sie sicher, dass Sie bei der Installation von Paketen die Dinge richtig buchstabieren, um fälschlicherweise Malware zu installieren
HINWEIS: Version 7 von Cross-Env unterstützt nur Node.js 10 und höher, um ihn auf Node.js 8 oder unterer Installation Version 6
npm install --save-dev cross-env@6
Ich benutze das in meinen NPM -Skripten:
{
"scripts" : {
"build" : " cross-env NODE_ENV=production webpack --config build/webpack.config.js "
}
} Letztendlich lautet der Befehl, der ausgeführt wird (unter Verwendung von cross-spawn ):
webpack --config build/webpack.config.js
Die NODE_ENV Umgebungsvariable wird durch cross-env festgelegt
Sie können mehrere Umgebungsvariablen gleichzeitig festlegen:
{
"scripts" : {
"build" : " cross-env FIRST_ENV=one SECOND_ENV=two node ./my-program "
}
}Sie können einen Befehl auch in mehrere einteilen oder die Deklaration der Umgebungsvariablen von der tatsächlichen Befehlsausführung trennen. Sie können es so machen:
{
"scripts" : {
"parentScript" : " cross-env GREET= " Joe " npm run childScript " ,
"childScript" : " cross-env-shell " echo Hello $GREET " "
}
} Wobei childScript den tatsächlichen Befehl zur Ausführung hält und parentScript die verwendeten Umgebungsvariablen festlegen. Anstatt das Childscript auszuführen, führen Sie den Elternteil aus. Dies ist sehr nützlich, um denselben Befehl mit unterschiedlichen Env -Variablen zu starten oder wenn die Umgebungsvariablen zu lang sind, um alles in einer Zeile zu haben. Dies bedeutet auch, dass Sie $GREET Env var Syntax auch unter Fenstern verwenden können, wodurch es normalerweise %GREET% ist.
Wenn Sie einem Dollarzeichen mit einer ungeraden Anzahl von Backslashes vorausgehen, wird die Ausdruckserklärung nicht ersetzt. Beachten Sie, dass dies Backslashes bedeutet, nachdem die JSON -String -Flucht stattgefunden hat. "FOO=\$BAR" wird nicht ersetzt. "FOO=\\$BAR" wird jedoch ersetzt.
Wenn Sie eine JSON-String (z. B. bei Verwendung von TS-Lader) übergeben möchten, können Sie wie folgt tun:
{
"scripts" : {
"test" : " cross-env TS_NODE_COMPILER_OPTIONS={ \" module \" : \" commonjs \" } node some_file.test.ts "
}
} Achten Sie besondere Aufmerksamkeit auf den dreifachen Backslash (\) bevor die Doppelzitate (") und das Fehlen einzelner Zitate (') angegeben werden. Beide Bedingungen müssen erfüllt werden, um sowohl unter Windows als auch an Unix zu arbeiten.
cross-env gegen cross-env-shell Das cross-env Modul enthüllt zwei Behälter: cross-env und cross-env-shell . Der erste führt Befehle mit cross-spawn aus, während der zweite die shell Option von Node's spawn verwendet.
Der Hauptanwendungsfall für cross-env-shell ist, wenn Sie eine Umgebungsvariable benötigen, um über ein ganzes Inline-Shell-Skript und nicht nur einen Befehl festzulegen.
Wenn Sie beispielsweise die Umgebungsvariable für mehrere Befehle in Serie gelten möchten, müssen Sie diese in Anführungszeichen einwickeln und cross-env-shell anstelle von cross-env verwenden.
{
"scripts" : {
"greet" : " cross-env-shell GREETING=Hi NAME=Joe " echo $GREETING && echo $NAME " "
}
} Die Faustregel lautet: Wenn Sie einen Befehl cross-env möchten, der spezielle Shell-Zeichen enthält , die Sie interpretieren möchten , dann verwenden Sie cross-env-shell . Ansonsten halten Sie sich an cross-env .
Unter Windows müssen Sie cross-env-shell verwenden, wenn Sie Signalereignisse in Ihrem Programm verarbeiten möchten. Ein häufiges Argument dafür ist, wenn Sie ein SIGINT -Ereignis erfassen möchten, das durch Drücken Ctrl + C auf der Befehlszeilenschnittstelle aufgerufen wird.
Bitte beachten Sie, dass npm standardmäßig cmd verwendet und dies nicht unterstützt. Wenn Sie dies nutzen möchten, müssen Sie Ihr .npmrc aktualisieren, um die script-shell auf PowerShell festzulegen. Erfahren Sie hier mehr.
Ich habe dies ursprünglich erstellt, um ein Problem zu lösen, das ich mit meinen NPM-Skripten in Winkelform hatte. Dies erleichterte den Windows -Benutzern viel einfacher zum Projekt.
env-cmd - liest stattdessen Umgebungsvariablen aus einer Datei@naholyr/cross-env - cross-env mit Unterstützung für die Festlegung von Standardwerten Möchten Sie einen Beitrag leisten? Suchen Sie nach dem guten ersten Ausgabeetikett.
Bitte stellen Sie ein Problem für Fehler, fehlende Dokumentation oder unerwartetes Verhalten ein.
Siehe Fehler
Dieses Projekt befindet sich im Wartungsmodus und es werden keine neuen Funktionsanfragen berücksichtigt.
Erfahren Sie mehr
Danke geht an diese Leute (Emoji -Schlüssel):
Kent C. Dodds ? | Ya zhuang ? | James Harris | compumike08 ? | Daniel Rodríguez Rivero ? | Jonas Keinholz ? | Hugo Wood ? |
Thiebaud Thomas ? | Daniel Rey López | Amila Welihinda ? | Paul Betts ? | Turner Hayes ? | Suhas Karanth | Sven |
D. Nicolás Lopez Zelaya | Johan Hernandez | Jordan Nielson ? | Jason Cooke | BiBO5088 | Eric Berry ? | Michaël de Boey |
Lauri Eskola | Devuxer | Daniel |
Dieses Projekt folgt der All-Contributors-Spezifikation. Beiträge jeglicher Art willkommen!
Hinweis: Dies wurde spät in das Projekt hinzugefügt. Wenn Sie in irgendeiner Weise zu diesem Projekt beigetragen haben, stellen Sie bitte eine Pull -Anfrage, um sich der
CONTRIBUTING.mdhinzuzufügen
MIT