Wie Node.js Befehlszeilenargumente verarbeitet: von process.argv bis zu den Quellen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Wie Node.js Befehlszeilenargumente verarbeitet: von process.argv bis zu den Quellen



Stellen Sie sich vor: Sie haben ein cooles Skript in Node.js geschrieben, das Bilder konvertiert. Aber jedes Mal den Code zu ändern, um den Dateinamen anzugeben, ist schlechter Stil. Viel cooler ist es, Folgendes auszuführen: node convert.js --input photo.jpg --format webp und das Ergebnis zu erhalten. Wie macht man solche Magie? Genau dieser Frage, einer der beliebtesten auf Stack Overflow, widmen wir uns heute.



Man könnte meinen, was könnte einfacher sein? Aber unter der Haube von Node.js (und V8 selbst) verbergen sich mehrere Schichten, die jeder Entwickler kennen sollte. Wir zeigen nicht nur, wie man process.argv erhält – wir werfen einen Blick in die Quellen von Node.js und erfahren, wie Argumente von Ihrem Terminal zu den Umgebungsvariablen des Prozesses gelangen. Los geht's!



Wozu überhaupt Befehlszeilenargumente?

Befehlszeilenargumente (CLI arguments) sind die wichtigste Methode, um Ihr Programm flexibel und wiederverwendbar zu machen, ohne den Code zu ändern. Anstatt hartcodierte Werte zu verwenden, übergeben Sie Daten als Eingabe. Dies ist die Grundlage fast aller DevOps-Tools, Bundler (Webpack, Vite) und Dienstprogramme. Der Umgang mit ihnen ist eine grundlegende Fähigkeit für JavaScript-Entwickler, die über den Browser hinausgehen möchten.



Stufe 1: Grundlagen – process.argv

Der einfachste und nativen Weg, Argumente in Node.js zu erhalten, ist der Zugriff auf das globale Objekt process.argv. Es ist ein Array von Zeichenketten. Schauen wir uns gleich ein Beispiel an.



Datei: args-demo.js

// args-demo.jsconsole.log(process.argv);


Starten wir mit Argumenten:

node args-demo.js hello --name=World 42


Ausgabe in der Konsole:

[  '/usr/local/bin/node',   // 0: Pfad zur ausführbaren Node.js-Datei  '/home/user/args-demo.js', // 1: Pfad zu Ihrem Skript  'hello',                 // 2: erstes benutzerdefiniertes Argument  '--name=World',          // 3: zweites Argument  '42'                     // 4: drittes Argument]


Das ist die ganze Magie. process.argv ist einfach ein Ausschnitt dessen, was das Betriebssystem an den Prozess übergeben hat. Die ersten beiden Elemente sind Dienstinformationen. Alles, was nach Index 2 kommt, sind Ihre Argumente. Wichtig: Alle sind Zeichenketten. Die Zahl 42 kam als Zeichenkette "42".



Wie verwirft man die ersten beiden Elemente?

Der Einfachheit halber wird oft Destrukturierung verwendet:

// Nur benutzerdefinierte Argumente erhaltenconst [, , ...userArgs] = process.argv;console.log(userArgs); // ['hello', '--name=World', '42']

Oder einfach process.argv.slice(2).



Stufe 2: Manuelles Parsen – ein eigenes Rad

Mit einem rohen Array von Zeichenketten zu arbeiten, ist umständlich. Wir müssen Flags (--name) von Werten (World) unterscheiden. Lassen Sie uns einen einfachen Parser schreiben, um die Logik zu verstehen.



// simple-parser.jsconst args = process.argv.slice(2);const parsed = {};

for (let i = 0; i < args.length; i++) { const arg = args[i]; if (arg.startsWith('--')) { // '--' entfernen und nach Wert suchen const key = arg.slice(2); const next = args[i + 1]; // Wenn das nächste Argument nicht mit '--' beginnt, ist es ein Wert if (next && !next.startsWith('--')) { parsed[key] = next; i++; // Nächsten Iterationsschritt überspringen } else { parsed[key] = true; // Boolesches Flag } } else if (arg.startsWith('-')) { // Kurze Flags, z.B. -v const key = arg.slice(1); parsed[key] = true; } else { // Einfach ein positionsabhängiges Argument if (!parsed._) { parsed._ = []; } parsed._.push(arg); }}

console.log(parsed);// node simple-parser.js --name World -v hello// { name: 'World', v: true, _: ['hello'] }


Dieser Code ist die Grundlage von Bibliotheken wie minimist. Wie Sie sehen, nichts Kompliziertes. Aber in realen Projekten ist es besser, fertige

Blogs

Buchempfehlungen