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 Auch in der Bibliothek
Eigen C++: Vollständiges Tutorial mit Beispielen
Aufgabenwarteschlangen in Swift: GCD, OperationQueue und Swift Concurrency
Jackson für Java: Vollständige Anleitung mit Beispielen