Erstellung von CLI-Tools mit Node.js: Überblick über die Frameworks Commander, Yargs und Inquirer

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

CLI-Framework für JavaScript (Node.js): Leistungsstarke Konsolenanwendungen erstellen



Die Entwicklung von Konsolen- (CLI) Dienstprogrammen ist eine der Kernaufgaben im Node.js-Ökosystem. Ob Build-Automatisierung, Paketverwaltung, Code-Generierung oder einfache Skripte für DevOps – ohne ein qualitativ hochwertiges CLI-Framework geht es nicht. In diesem Artikel analysieren wir die drei beliebtesten Tools: Commander, Yargs und Inquirer. Sie erfahren, wie sie funktionieren, was ihre Stärken sind, und sehen Codebeispiele.



Wozu braucht man ein CLI-Framework?

Ein einfaches Konsolenprogramm kann man auch ohne Framework schreiben – es reicht, process.argv zu verarbeiten. Aber sobald das Projekt wächst, tauchen Unterbefehle, Flags und interaktive Eingabeaufforderungen auf – das manuelle Parsen von Argumenten wird zur Hölle. Frameworks übernehmen:

  • das Parsen von Argumenten und Optionen;
  • die Generierung von Hilfetexten (--help);
  • die Validierung von Eingabedaten;
  • die Unterstützung von Unterbefehlen (wie bei git);
  • interaktive Dialoge mit dem Benutzer.


Commander – Klassiker und Standard

Commander ist das beliebteste CLI-Framework für Node.js. Es wird von Größen wie Vue CLI, NestJS und vielen anderen verwendet. Hauptmerkmale: intuitive API, automatische Hilfeausgabe, Unterstützung für variable Argumente.



Beispiel einer einfachen Anwendung:

#!/usr/bin/env nodeconst { Command } = require('commander');const program = new Command();

program .name('greet') .description('Begrüßt den Benutzer') .version('1.0.0');

program .command('hello') .argument('<name>', 'Name des Benutzers') .option('-l, --lang <language>', 'Sprache der Begrüßung', 'de') .action((name, options) => { if (options.lang === 'de') { console.log(`Hallo, ${name}!`); } else { console.log(`Hello, ${name}!`); } });

program.parse();


Aufruf: node app.js hello Ivan --lang de → Hallo, Ivan!



Commander generiert automatisch Hilfe über --help und unterstützt Methodenverkettung. Es ist die ideale Wahl für die meisten CLI-Dienstprogramme.



Yargs – Flexibilität und Komfort

Yargs ist ein weiteres leistungsstarkes Framework, das besonders stark im Parsen komplexer Optionen und der automatischen Typbestimmung ist. Es ist bei Entwicklern beliebt, die eine feine Kontrolle über Argumente benötigen.



Beispiel mit Yargs:

#!/usr/bin/env nodeconst yargs = require('yargs/yargs');const { hideBin } = require('yargs/helpers');

const argv = yargs(hideBin(process.argv)) .command('calc', 'Taschenrechner', (yargs) => { return yargs .option('a', { describe: 'Erste Zahl', type: 'number', demandOption: true }) .option('b', { describe: 'Zweite Zahl', type: 'number', demandOption: true }) .option('op', { describe: 'Operation (sum, sub)', type: 'string', default: 'sum' }); }, (argv) => { const { a, b, op } = argv; if (op === 'sum') console.log(`Summe: ${a + b}`); else if (op === 'sub') console.log(`Differenz: ${a - b}`); else console.log('Unbekannte Operation'); }) .demandCommand(1, 'Geben Sie einen Befehl an') .help() .argv;


Yargs kann automatisch Zeichenfolgen in Zahlen, boolesche Werte und sogar Arrays konvertieren. Sein leistungsstarkes middleware-System ermöglicht das Hinzufügen gemeinsamer Prüfungen für alle Befehle.



Inquirer – Interaktivität im Terminal

Inquirer ist nicht wirklich ein CLI-Framework, sondern eher eine Bibliothek zur Erstellung interaktiver Konsolenoberflächen. Es ergänzt Commander oder Yargs perfekt, wenn Auswahlfragen, Texteingaben oder Kontrollkästchen benötigt werden.



Beispiel einer interaktiven Abfrage:

const inquirer = require('inquirer');

async function main() { const answers = await inquirer.prompt([ { type: 'inp

Empfehlungen