Von Malte Heidemann auf Donnerstag, 19. Januar 2023
Kategorie: Application Development

Zu Befehl: CLIs mit Node.js und Commander

Im Gegensatz zu Anwendungen mit einer grafischen Benutzeroberfläche (GUI) sind CLIs (Command Line Interfaces) Programme, die nicht nur in einem Terminal gestartet, sondern typischerweise auch gesteuert werden. Dabei kann der Endnutzer Argumente an das Programm übergeben, um dieses via Optionen zu konfigurieren (z. B. --debug) oder verschiedene Aktionen durchzuführen (z. B. start <service>).

In diesem Artikel wird zunächst im Ansatz gezeigt, wie CLIs ohne Hilfsmittel erstellt werden können. Hierfür wird Node.js verwendet, wodurch JavaScript auch ohne Browser ausgeführt werden kann. Anschließend wird Commander.js vorgestellt. Mit dieser Bibliothek können Argumente im Handumdrehen geparst werden, wodurch die Entwicklung von CLIs erheblich vereinfacht wird.

Terminologie

In diesem Artikel wird zwischen folgenden Begriffen unterschieden:

Programm-Argumente händisch parsen - ist doch gar nicht so schwer?

Das Herzstück einer CLI ist die Interpretation der Argumente, welche vom Endnutzer spezifiziert wurden. In Node.js kann man über das Array process.argv relativ einfach auf diese Argumente zugreifen: 

Anschließend kann man die Argumente einfach mit einem for-Loop durchlaufen und auf die Präsenz bestimmter Werte prüfen. Wieso braucht man dafür eine Bibliothek!? 

Zu viele Aspekte

Nach kurzer Überlegung wird klar, dass die manuelle Entwicklung einer CLI doch nicht so einfach ist. Um die Anwendung benutzerfreundlich und intuitiv zu gestalten, müssen nämlich viele weitere Aspekte beachtet werden:

Schließlich scheint die manuelle Entwicklung einer CLI ziemlich aufwendig, da das Interpretieren der Argumente schnell sehr komplex werden kann. Zum Glück existieren jedoch diverse Bibliotheken, welche diese Aufgabe übernehmen und somit die Entwicklung von CLIs vereinfachen.

CLIs mit Commander

Commander.js ist eine solche Bibliothek, welche über folgenden Befehl installiert werden kann:

$ npm install commander

Anschließend kann Commander wie folgt initialisiert werden:

Eine Ausführung dieses Skripts ohne Argumente erzeugt noch keine Ausgabe. Allerdings überprüft Commander bereits, ob falsche Optionen angegeben wurden. Zudem wird eine Hilfe-Ausgabe mit den Metadaten generiert, wenn die Option --help angegeben wurde:

Optionen hinzufügen

Um dem Programm nun Optionen hinzuzufügen, kann die Funktion program.option() verwendet werden. Darin können der Name einer Option (z. B. --debug), deren Shortcut (-d) und eine Beschreibung angegeben werden. Nach dem Parsen aller Argumente können die Optionen via program.opts() ausgelesen werden:

Commands und Actions

Die o. g. Funktionalitäten nehmen einem bereits viel Arbeit ab. Allerdings bietet Commander noch weitere Möglichkeiten, um CLIs zu erweitern. So können neben den Optionen auch sog. Commands definiert werden, welche größere alleinstehende Funktionalitäten repräsentieren. Dabei kann ein Command ein Executable ausführen, welches sich im Dateisystem befindet (z. B. ein Bash-Skript oder eine kompilierte Binary). Wichtig bei Skripten ist hierbei nur, dass die benötigten Berechtigungen und im Skript eine Shebang (z. B. #!/bin/bash) vorhanden sind. Alternativ kann dem Command innerhalb der Anwendung eine Action hinzugefügt werden:

Standardmäßig werden Executables im Verzeichnis des ausgeführten Node-Skripts gesucht. Über .executableDir() kann jedoch ein anderes Verzeichnis angegeben werden.

Fazit

Bei der Erstellung von Anwendungen kommt es oft vor, dass die Endnutzer Optionen auswählen oder bestimmte Werte festlegen müssen. Das Ziel sollte dabei stets eine benutzerfreundliche und fehlerfreie Verarbeitung der Argumente sein. Dazu müssen verschiedene Aspekte beachtet werden, wie z. B. die Dokumentation von Argumenten, Behandlung von Doppelungen u. v. m.

Erstellt man solche CLIs in Node.js, nimmt einem die Bibliothek Commander.js jedoch fast die ganze Arbeit ab. Dadurch wird viel Zeit gewonnen, welche für die Entwicklung der eigentlichen Funktionalität einer Anwendung aufgewendet werden kann.

Seminarempfehlungen

Kommentare hinterlassen