Frage Wie übergebe ich Befehlszeilenargumente an ein Node.js-Programm?


Ich habe einen Webserver in geschrieben Node.js und ich möchte mit einem bestimmten Ordner starten. Ich bin mir nicht sicher, wie ich auf Argumente in JavaScript zugreifen kann. Ich führe Knoten wie folgt aus:

$ node server.js folder

Hier server.js ist mein Servercode. Die Node.js-Hilfe sagt, das ist möglich:

$ node -h
Usage: node [options] script.js [arguments]

Wie würde ich auf diese Argumente in JavaScript zugreifen? Irgendwie war ich nicht in der Lage, diese Informationen im Internet zu finden.


1764
2017-12-04 01:56


Ursprung


Antworten:


Standardmethode (keine Bibliothek)

Die Argumente sind in gespeichert process.argv

Hier sind Der Knoten arbeitet mit Befehlszeilenargumenten:

process.argv ist ein Array mit den Befehlszeilenargumenten. Das erste Element ist "Knoten", das zweite Element ist der Name der JavaScript-Datei. Die nächsten Elemente werden zusätzliche Befehlszeilenargumente sein.

// print process.argv
process.argv.forEach(function (val, index, array) {
  console.log(index + ': ' + val);
});

Dies wird erzeugen:

$ node process-2.js one two=three four
0: node
1: /Users/mjr/work/node/process-2.js
2: one
3: two=three
4: four

2344
2017-12-04 02:05



Um die Argumente wie normale Javascript-Funktionen zu normalisieren, mache ich das in meinen node.js Shell-Skripten:

var args = process.argv.slice(2);

Beachten Sie, dass der erste Arg normalerweise der Pfad zu nodejs ist und der zweite arg der Speicherort des Skripts, das Sie ausführen.


472
2018-04-23 23:13



Das Neueste Recht antworten Sie dafür, es zu benutzen Minimist Bibliothek. Wir haben benutzt Knoten-Optimist aber es ist seither veraltet.

Hier ist ein Beispiel, wie man es direkt aus der minimistischen Dokumentation verwendet:

var argv = require('minimist')(process.argv.slice(2));
console.dir(argv);

-

$ node example/parse.js -a beep -b boop
{ _: [], a: 'beep', b: 'boop' }

-

$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz
{ _: [ 'foo', 'bar', 'baz' ],
  x: 3,
  y: 4,
  n: 5,
  a: true,
  b: true,
  c: true,
  beep: 'boop' }

234
2017-07-08 17:26



2018 Antwort basierend auf aktuellen Trends in der Wildnis:


Vanille-Javascript-Argumentanalyse:

const args = process.argv;
console.log(args);

Das gibt zurück:

$ node server.js one two=three four
['node', '/home/server.js', 'one', 'two=three', 'four']

Offizielle Dokumente


Am häufigsten verwendete NPM-Pakete für die Analyse von Argumenten:

Minimist: Für minimale Argumentanalyse.

Commander.js: Am häufigsten verwendetes Modul für das Parsen von Argumenten.

Miau: Leichtere Alternative zu Commander.js

Yargs: Anspruchsvollere Argumentanalyse (schwer).

Vorpal.js: Reife / interaktive Befehlszeilenanwendungen mit Parsing von Argumenten.


203
2018-01-14 05:26



Optimist (Knotenoptimist)

Auschecken Optimist BibliothekEs ist viel besser, als Befehlszeilenoptionen manuell zu analysieren.

Aktualisieren

Optimist ist veraltet. Versuchen Yargs Das ist eine aktive Gabel des Optimisten.


107
2017-07-04 04:02



Mehrere gute Antworten hier, aber alles scheint sehr komplex. Dies ist sehr ähnlich wie Bash Skripte auf Argument Werte zugreifen und es ist bereits standardmäßig mit node.js zur Verfügung gestellt, wie MooGoo darauf hingewiesen. (Nur um es jemandem verständlich zu machen, der neu in node.js ist)

Beispiel:

$ node yourscript.js banana monkey

var program_name = process.argv[0]; //value will be "node"
var script_path = process.argv[1]; //value will be "yourscript.js"
var first_value = process.argv[2]; //value will be "banana"
var second_value = process.argv[3]; //value will be "monkey"

68
2017-12-12 05:19



Commander.js

Funktioniert hervorragend zum Definieren von Optionen, Aktionen und Argumenten. Es generiert auch die Hilfeseiten für Sie.

Sofort

Funktioniert hervorragend, um Eingaben vom Benutzer zu erhalten, wenn Sie den Callback-Ansatz mögen.

Co-Eingabeaufforderung

Funktioniert hervorragend, um vom Benutzer Eingaben zu erhalten, wenn Sie den Generator-Ansatz mögen.


65
2017-09-20 10:20



Stdio-Bibliothek

Die einfachste Methode zum Analysieren von Befehlszeilenargumenten in NodeJS ist die Verwendung von stdio Modul. Inspiriert von UNIX getopt Dienstprogramm ist es so trivial wie folgt:

var stdio = require('stdio');
var ops = stdio.getopt({
    'check': {key: 'c', args: 2, description: 'What this option means'},
    'map': {key: 'm', description: 'Another description'},
    'kaka': {args: 1, mandatory: true},
    'ooo': {key: 'o'}
});

Wenn Sie den vorherigen Code mit diesem Befehl ausführen:

node <your_script.js> -c 23 45 --map -k 23 file1 file2

Dann ops Objekt wird wie folgt sein:

{ check: [ '23', '45' ],
  args: [ 'file1', 'file2' ],
  map: true,
  kaka: '23' }

So können Sie es verwenden, wie Sie möchten. Zum Beispiel:

if (ops.kaka && ops.check) {
    console.log(ops.kaka + ops.check[0]);
}

Gruppierte Optionen werden ebenfalls unterstützt, sodass Sie schreiben können -om Anstatt von -o -m.

Außerdem, stdio kann automatisch eine Hilfe / Nutzungsausgabe generieren. Wenn du anrufst ops.printHelp() Du bekommst folgendes:

USAGE: node something.js [--check <ARG1> <ARG2>] [--kaka] [--ooo] [--map]
  -c, --check <ARG1> <ARG2>   What this option means (mandatory)
  -k, --kaka                  (mandatory)
  --map                       Another description
  -o, --ooo

Die vorherige Nachricht wird auch angezeigt, wenn keine obligatorische Option angegeben wurde (der die Fehlermeldung vorausgeht) oder wenn sie falsch angegeben ist (wenn Sie beispielsweise ein einzelnes Argument für eine Option angeben und 2 benötigt).

Sie können installieren stdio Modul mit NPM:

npm install stdio

35
2017-08-13 10:30



Wenn Ihr Skript myScript.js heißt und Sie den Vor- und Nachnamen "Sean Worthington" als Argumente wie folgt übergeben möchten:

node myScript.js Sean Worthington

Dann schreiben Sie in Ihrem Skript:

var firstName = process.argv[2]; // Will be set to 'Sean'
var lastName = process.argv[3]; // Will be set to 'Worthington'

28
2018-06-17 00:04