CLI-Frameworks für JavaScript (Node.js): Erstellung leistungsstarker Konsolenanwendungen
Die Entwicklung von Kommandozeilenschnittstellen (CLI) ist eine der Kernaufgaben im Node.js-Ökosystem. Von einfachen Skripten bis hin zu komplexen DevOps-Tools – CLI-Anwendungen umgeben uns überall. Allerdings ist das manuelle Schreiben eines Argument-Parsers, die Behandlung von Unterbefehlen und die Ausgabe von Hilfetexten eine mühsame und fehleranfällige Arbeit. Genau hier kommen CLI-Frameworks für JavaScript (Node.js) ins Spiel, die die gesamte Routinearbeit übernehmen.
In diesem Artikel werden wir die beiden beliebtesten Frameworks im Detail analysieren: Commander.js und Yargs. Sie erfahren, wie Sie schnell professionelle CLI-Anwendungen mit Unterstützung für Argumente, Optionen, farbige Ausgabe und automatischer Hilfegenerierung erstellen können.
Commander.js – Klassiker und Einfachheit
Commander.js ist das bekannteste und am weitesten verbreitete Framework zur Erstellung von CLIs in Node.js. Es wird in Projekten wie Vue CLI, Angular CLI und vielen anderen verwendet. Sein Hauptvorteil ist die intuitive API, die auf Methodenverkettung basiert.
Installation
npm install commanderBasisbeispiel
const { Command } = require('commander');const program = new Command();
program .name('greet') .description('CLI zur Begrüßung') .version('1.0.0');
program .command('hello') .description('Benutzer begrüßen') .argument('<name>', 'Name des Benutzers') .option('-l, --language <lang>', 'Sprache der Begrüßung', 'Russisch') .action((name, options) => { if (options.language === 'Englisch') { console.log(`Hello, ${name}!`); } else { console.log(`Привет, ${name}!`); } });
program.parse(process.argv);In diesem Beispiel haben wir den Befehl greet hello erstellt, der ein erforderliches Argument name und eine optionale Option --language akzeptiert. Commander generiert automatisch die Hilfe für den Befehl --help.
Unterstützung von Unterbefehlen
Commander bewältigt die Hierarchie von Befehlen hervorragend. Sie können verschachtelte Befehle erstellen, was besonders nützlich für komplexe Werkzeuge ist:
const project = program.command('project');
project .command('init') .description('Projekt initialisieren') .action(() => { console.log('Projekt initialisiert'); });
project .command('build') .description('Projekt bauen') .option('-p, --production', 'Produktions-Build') .action((options) => { console.log(options.production ? 'Produktions-Build' : 'Normaler Build'); });Yargs – Flexibilität und Leistungsfähigkeit
Yargs ist ein weiteres leistungsstarkes Framework, das sich auf das Parsen von Argumenten konzentriert und sehr flexible Möglichkeiten bietet. Es ist besonders gut geeignet, wenn Sie eine präzise Kontrolle über das Verhalten des Parsers benötigen oder komplexe mehrstufige Schnittstellen erstellen.
Installation
npm install yargsBeispiel mit Yargs
const yargs = require('yargs/yargs');const { hideBin } = require('yargs/helpers');
const argv = yargs(hideBin(process.argv)) .command('serve [port]', 'Server starten', (yargs) => { yargs .positional('port', { describe: 'Port für den Server', default: 3000 }); }, (argv) => { console.log(`Server gestartet auf Port ${argv.port}`); }) .option('verbose', { alias: 'v', type: 'boolean', description: 'Ausführliche Ausgabe' }) .example('$0 serve 8080', 'Server auf Port 8080 starten') .demandCommand(1, 'Ein Befehl muss angegeben werden') .help() .argv;Yargs bietet einen deterministischeren Ansatz zur Definition von Befehlen. Sie können genau angeben, welche Argumente positional sind, Standardwerte für sie festlegen, Typen überprüfen und vieles mehr.
Validierung und Typen
Eine der Stärken
Auch in der Bibliothek
Internationalisierung (i18n) in C# (.NET): Vollständige Anleitung
Media3 / ExoPlayer für Kotlin: Komplettes Tutorial mit Beispielen
Elasticsearch REST-Client für Kotlin: Leitfaden zur Verwendung
Caching in Java: Redis, Ehcache, Caffeine, Hazelcast – Überblick und Beispiele