Ich habe einen Webserver in Node.js geschrieben und möchte mit einem bestimmten Ordner starten. Ich bin nicht sicher, wie ich auf Argumente in JavaScript zugreifen soll. Ich führe einen Knoten wie folgt aus:
$ node server.js folder
Hier server.js
ist mein Servercode. Die Hilfe von Node.j sagt, dass dies möglich ist:
$ node -h
Usage: node [options] script.js [arguments]
Wie würde ich in JavaScript auf diese Argumente zugreifen? Irgendwie konnte ich diese Informationen nicht im Web finden.
quelle
process.argv[n]
Won
ist der auf Null basierende Indexnode [options] [ -e script | script.js ] [arguments]
odernode debug script.js [arguments]
. Zum Beispiel:node --harmony script.js balala
odernode --no-deprecation --enable-ssl2 script.js balala
wir können process.execArgv mit process.argv verwendenUm die Argumente zu normalisieren, die eine reguläre Javascript-Funktion erhalten würde, mache ich dies in meinen Shell-Skripten node.js:
Beachten Sie, dass das erste Argument normalerweise der Pfad zu nodejs ist und das zweite Argument der Speicherort des Skripts ist, das Sie ausführen.
quelle
var args = process.argv.splice(process.execArgv.length + 2);
// weil es Ausnahmen bei der Verwendung von Knotenbefehlen gibt, zum Beispiel :node --harmony script.js balala
. siehe process.execArgvexecArgv
sind nicht inargv
so die 2 ist genugprocess.argv.splice(process.execArgv.length + 2)
: für einen Befehlnode --harmony script.js --version
, dasprocess.argv
ist['/usr/local/bin/node', 'script.js', '--version']
. Flaggen annode
sind NICHT enthaltenprocess.argv
!Die aktuell richtige Antwort darauf ist die Verwendung der Minimist- Bibliothek. Früher haben wir Node-Optimist verwendet, aber seitdem ist es veraltet.
Hier ist ein Beispiel für die Verwendung direkt aus der Minimist-Dokumentation:
- -
- -
quelle
Antwort 2018 basierend auf aktuellen Trends in freier Wildbahn:
Analyse von Vanille-Javascript-Argumenten:
Dies gibt zurück:
Offizielle Dokumente
Die am häufigsten verwendeten NPM-Pakete zum Parsen von Argumenten:
Minimist : Für minimales Parsen von Argumenten.
Commander.js : Das am häufigsten verwendete Modul für das Parsen von Argumenten.
Miau : Leichtere Alternative zu Commander.js
Yargs : Anspruchsvollere Argumentanalyse (schwer).
Vorpal.js : Reife / interaktive Befehlszeilenanwendungen mit Argumentanalyse.
quelle
Optimist (Knotenoptimist)
Schauen Sie sich die Optimist-Bibliothek an , sie ist viel besser als das manuelle Parsen von Befehlszeilenoptionen.
Aktualisieren
Optimist ist veraltet. Versuchen Yargs , eine aktive Gabel des Optimisten.
quelle
Einige gute Antworten hier, aber alles scheint sehr komplex. Dies ist sehr ähnlich dem Zugriff von Bash-Skripten auf Argumentwerte und wird bereits standardmäßig mit node.js bereitgestellt, wie MooGoo hervorhob. (Nur um es für jemanden verständlich zu machen, der neu in node.js ist)
Beispiel:
quelle
Commander.js
Funktioniert hervorragend zum Definieren Ihrer Optionen, Aktionen und Argumente. Außerdem werden die Hilfeseiten für Sie generiert.
Sofort
Funktioniert hervorragend, um Eingaben vom Benutzer zu erhalten, wenn Sie den Rückrufansatz mögen.
Co-Prompt
Funktioniert hervorragend, um Eingaben vom Benutzer zu erhalten, wenn Sie den Generatoransatz mögen.
quelle
Keine Bibliotheken mit Flags, die in ein einfaches Objekt formatiert sind
Beispiele
Einfach
Eingang
Ausgabe
Echte Welt
Eingang
Ausgabe
quelle
= longArg[1]
Sie schreiben könnten= longArg.length > 1 ? longArg[1] : true;
Dies würde Sie diese Art von Argument passieren lassen:node config/build.js --flag1 --flag2
Stdio Bibliothek
Der einfachste Weg, Befehlszeilenargumente in NodeJS zu analysieren, ist die Verwendung des stdio- Moduls. Inspiriert vom UNIX-
getopt
Dienstprogramm ist es so trivial wie folgt:Wenn Sie den vorherigen Code mit diesem Befehl ausführen:
Dann wird das
ops
Objekt wie folgt sein:So können Sie es verwenden, wie Sie möchten. Zum Beispiel:
Gruppierte Optionen werden ebenfalls unterstützt, sodass Sie
-om
statt schreiben können-o -m
.Darüber hinaus
stdio
kann automatisch eine Hilfe- / Nutzungsausgabe generiert werden. Wenn Sie anrufen, erhaltenops.printHelp()
Sie Folgendes:Die vorherige Meldung wird auch angezeigt, wenn keine obligatorische Option angegeben ist (vorangestellt von der Fehlermeldung) oder wenn sie falsch angegeben ist (z. B. wenn Sie ein einzelnes Argument für eine Option angeben und diese 2 benötigt).
Sie können installieren stdio- Modul mit NPM :
quelle
Wenn Ihr Skript myScript.js heißt und Sie den Vor- und Nachnamen 'Sean Worthington' als Argumente wie folgt übergeben möchten:
Dann schreiben Sie in Ihr Skript:
quelle
Kommandozeilen-Argumente sind einen Blick wert!
Sie können Optionen mithilfe der Hauptnotationsstandards festlegen ( weitere Informationen ). Diese Befehle sind alle gleichwertig und setzen dieselben Werte:
Um auf die Werte zuzugreifen, erstellen Sie zunächst eine Liste mit Optionsdefinitionen, in denen die von Ihrer Anwendung akzeptierten Optionen beschrieben werden. Die
type
Eigenschaft ist eine Setter-Funktion (der angegebene Wert wird hierdurch übergeben), sodass Sie die volle Kontrolle über den empfangenen Wert haben.Analysieren Sie als Nächstes die Optionen mit commandLineArgs () :
options
sieht jetzt so aus:Erweiterte Verwendung
Neben der oben genannten typischen Verwendung können Sie Befehlszeilenargumente so konfigurieren, dass sie erweiterte Syntaxformulare akzeptieren.
Befehlsbasierte Syntax (Git-Stil) in der Form:
Zum Beispiel.
Befehls- und Unterbefehlssyntax (Docker-Stil) in der Form:
Zum Beispiel.
Generierung von Nutzungsrichtlinien
Ein Verwendungsleitfaden (normalerweise gedruckt, wenn er festgelegt
--help
ist) kann mithilfe der Befehlszeilennutzung erstellt werden . Sehen Sie sich die folgenden Beispiele an und lesen Sie die DokumentationAnweisungen zum Erstellen finden Sie in .Ein typisches Beispiel für eine Bedienungsanleitung.
Die Gebrauchsanweisung für Polymer-Cli ist ein gutes Beispiel aus der Praxis .
Weiterführende Literatur
Es gibt noch viel mehr zu lernen. Beispiele und Dokumentation finden Sie im Wiki .
quelle
partial
und behobenstopAtFirstUnknown
. Siehe die Dokumente .Dafür gibt es eine App. Nun, Modul. Nun, mehr als eine, wahrscheinlich Hunderte.
Yargs ist einer der lustigen, seine Dokumente sind cool zu lesen.
Hier ist ein Beispiel von der Seite github / npm:
Die Ausgabe erfolgt hier (sie liest Optionen mit Bindestrichen usw., kurz und lang, numerisch usw.).
quelle
Hier ist meine 0-Dep-Lösung für benannte Argumente:
Beispiel:
Hinweis: Dies schlägt natürlich fehl, wenn das Argument a enthält
=
. Dies ist nur für eine sehr einfache Verwendung.quelle
Es ist wahrscheinlich eine gute Idee, Ihre Konfiguration zentral mit nconf https://github.com/flatiron/nconf zu verwalten
Es hilft Ihnen beim Arbeiten mit Konfigurationsdateien, Umgebungsvariablen und Befehlszeilenargumenten.
quelle
ohne librairies: using Array.prototype.reduce ()
für diesen Befehl
node index.js count=2 print debug=false msg=hi
ebenfalls,
wir können es ändern
von (viel länger)
Boolean & Number automatisch analysieren
quelle
count
undc
Kommandozeilenoptionen (c
als Alias / shorcut fürcount
)?Das Übergeben und Parsen von Argumenten ist ein einfacher Vorgang. Node stellt Ihnen die Eigenschaft process.argv zur Verfügung, bei der es sich um ein Array von Zeichenfolgen handelt. Dies sind die Argumente, die beim Aufrufen von Node verwendet wurden. Der erste Eintrag des Arrays ist die ausführbare Node-Datei, und der zweite Eintrag ist der Name Ihres Skripts.
Wenn Sie ein Skript mit den folgenden Elementen ausführen
Datei: args.js
Sie erhalten Array wie
quelle
Wenn Sie so etwas ausführen möchten:
- -
Oder so etwas wie:
- -
quelle
proj.js
Terminal:
Ergebnis:
Erklärung:
0
: Das Verzeichnis von node.exe in Ihrer Bearbeitung (C: \ Programme \ nodejs \ node.exe ')1
: Das Verzeichnis Ihrer Projektdatei. (proj.js)2
: Dein erstes Argument zum Knoten (arg1)3
: Dein zweites Argument zum Knoten (arg2)4
: Dein drittes Argument zum Knoten (arg3)Ihre eigentlichen Argumente beginnen mit dem
2nd
Index desargv
Arraysprocess.argv[2]
.quelle
Sie können Befehlszeilenargumente mit erreichen
system.args
. Und ich benutze die folgende Lösung, um Argumente in ein Objekt zu analysieren, damit ich das gewünschte mit Namen erhalten kann.Jetzt müssen Sie den Index des Arguments nicht mehr kennen. benutze es wie
args.whatever
quelle
map
Eigenschaft ist undefiniert.Sie können alle Argumente analysieren und prüfen, ob sie vorhanden sind.
Datei: parse-cli-argument.js:
Dann tun Sie einfach:
quelle
Ohne Bibliotheken
Wenn Sie dies in Vanilla JS / ES6 tun möchten, können Sie die folgende Lösung verwenden
arbeitete nur in NodeJS> 6
Und dieser Befehl
wird das folgende Ergebnis erzeugen
ps Bitte korrigieren Sie den Code in der Karte und reduzieren Sie die Funktion, wenn Sie eine elegantere Lösung finden, danke;)
quelle
let args = process.argv.slice(2).reduce((acc, arg) => { let [k, v] = arg.split('=') acc[k] = v return acc }, {})
Obwohl die obigen Antworten perfekt sind und jemand bereits Yargs vorgeschlagen hat, ist die Verwendung des Pakets wirklich einfach. Dies ist ein schönes Paket, das das Übergeben von Argumenten an die Befehlszeile sehr einfach macht.
Bitte besuchen Sie https://yargs.js.org/ für weitere Informationen.
quelle
Das Übergeben von Argumenten ist einfach, und das Empfangen von Argumenten ist nur eine Frage des Lesens des process.argv-Array-Knotens, der im Grunde genommen von überall zugänglich ist. Aber Sie möchten sie sicher als Schlüssel / Wert-Paare lesen, daher benötigen Sie ein Skript, um es zu interpretieren.
Joseph Merdrignac hat eine schöne Version mit reduct gepostet, die sich jedoch auf eine
key=value
Syntax anstelle von-k value
und stützte--key value
. Ich habe es viel hässlicher und länger umgeschrieben, um diesen zweiten Standard zu verwenden, und ich werde es als Antwort veröffentlichen, weil es nicht als Kommentar passen würde. Aber es erledigt den Job.Mit diesem Code würde ein Befehl
node script.js alpha beta -charlie delta --echo foxtrot
Ihnen das folgende Objekt gebenquelle
Der einfachste Weg, Argumente in Node.js abzurufen, ist über das Array process.argv. Dies ist ein globales Objekt, das Sie verwenden können, ohne zusätzliche Bibliotheken zu importieren. Sie müssen lediglich Argumente an eine Node.js-Anwendung übergeben, wie wir zuvor gezeigt haben, und auf diese Argumente kann innerhalb der Anwendung über das Array process.argv zugegriffen werden.
Das erste Element des process.argv-Arrays ist immer ein Dateisystempfad, der auf die ausführbare Datei des Knotens verweist. Das zweite Element ist der Name der ausgeführten JavaScript-Datei. Und das dritte Element ist das erste Argument, das der Benutzer tatsächlich übergeben hat.
Dieses Skript durchläuft lediglich das Array process.argv und druckt die Indizes zusammen mit den in diesen Indizes gespeicherten Elementen. Es ist sehr nützlich für das Debuggen, wenn Sie jemals fragen, welche Argumente Sie in welcher Reihenfolge erhalten.
Sie können auch Bibliotheken wie yargs zum Arbeiten mit Commnadline-Argumenten verwenden.
quelle
TypeScript-Lösung ohne Bibliotheken:
Eingang:
ts-node index.js -p param --parameter parameter
Ausgabe:
{ p: 'param ', parameter: 'parameter' }
quelle
process.argv
Ist Ihr Freund, wird das Erfassen von Befehlszeilenargumenten in Node JS nativ unterstützt. Siehe Beispiel unten ::quelle
wie in den Knotendokumenten angegeben Die Eigenschaft process.argv gibt ein Array zurück, das die Befehlszeilenargumente enthält, die beim Starten des Prozesses Node.js übergeben wurden.
Angenommen, Sie verwenden das folgende Skript für process-args.js:
Starten des Node.js-Prozesses als:
Würde die Ausgabe erzeugen:
quelle
Die meisten Leute haben gute Antworten gegeben. Ich möchte hier auch etwas beitragen. Ich gebe die Antwort mithilfe der
lodash
Bibliothek, um alle Befehlszeilenargumente zu durchlaufen, die wir beim Starten der App übergeben:Um den obigen Code auszuführen, führen Sie einfach die folgenden Befehle aus:
Das Ergebnis wird sein:
quelle
Der beste Weg, Befehlszeilenargumente an ein Node.js-Programm zu übergeben, ist die Verwendung einer Befehlszeilenschnittstelle (Command Line Interface, CLI).
Es gibt ein geschicktes npm-Modul namens nodejs-cli , das Sie verwenden können.
Wenn Sie eine ohne Abhängigkeiten erstellen möchten, habe ich eine auf meinem Github. Wenn Sie sie überprüfen möchten, ist sie eigentlich recht einfach und benutzerfreundlich. Klicken Sie hier .
quelle
Lösung ohne Abhängigkeiten im ES6-Stil:
quelle