Im letzten Artikel der Serie haben wir das Befehlszeilentool xmlservice-cli näher kennengelernt. Wir haben erkundet wie man das Tool installieren und zustandslos sowie zustandsvoll ausführen kann. Diese Ausführung haben wir interaktiv aus der Shell getätigt, jedoch kann man das volle Potenzial vom xmlservice-cli meines Erachtens nur durch programmatische Ausführung ausschöpfen. Dementsprechend bereiten wir in diesem Artikel unsere Node.js-basierte Entwicklungsumgebung(en) vor und veröffentlichen sogar das Grundgerüst unseres Projektes auf NPM.

xmlservice-cli abstrahieren

Da xmlservice-cli ein „stinknormales“ Befehlszeilentool ist, ist es möglich eine Abstraktion für jede Programmiersprache bzw. jede Laufzeitumgebung zu bauen, die Unterprozesse und Streams unterstützt. Eines der beliebtesten Laufzeitumgebungen auf der IBM i ist Node.js, welches all unsere Anforderungen erfüllt. Vor allem in Kombination mit TypeScript entwickelt sich Node.js zur einer potenten Softwareumgebung, um die IBM i mit dem digitalen Ökosystem von NPM zu erweitern.

Und genau das werden wir mit dem Projekt xmlservice-ts tun!

xmlservice-ts vs. node-itoolkit

Viele, die auf der IBM i mit Node.js arbeiten, werden das node-itoolkit Paket kennen und sich fragen, was die Vorteile oder Unterschiede von xmlservice-ts sein werden.

Vorweg möchte ich erwähnen, dass das node-itoolkit tatsächlich eine sehr gute Bibliothek ist. Es hat lediglich für meine Zwecke einige kleine Defizite. Zum Beispiel werden aktuell (Artikel erschein am 16.01.2023 im Techknowletter) keine zustandsvollen Ausführungen unterstützt, die SSH-Verbindung zu dem jeweiligen System wird auch nicht gecached und das Interfacing erlaubt keine reine XML-Eingabe. Diese Defizite, oder besser gesagt Designunterschiede, motivierten mich dazu, eine Alternative zu entwickeln. Das xmlservice-ts wird open source sein und man kann die Entwicklung der Quelltexte hier verfolgen: https://github.com/KerimG/xmlservice-ts

Geplante Unterschiede zwischen xmlservice-ts und node-itoolkit:

xmlservice-ts node-itoolkit
·       Kann ohne SSH auf die lokale IBM i zugreifen

·       SSH-Sitzungen auf ferne Systeme werden gecached

·       Unterstützt zustandsvolle und zustandslose und zustandsvolle Sitzungen

·       Das Interface kann optional auch reines XML übergeben

·       Einfacheres Interfacing

·       Durch Interfacing erstelltes XML kann exportiert werden

·       u. v. m.

·       Benötigt stets SSH

·       SSH-Sitzungen werden mit jedem Aufruf aufgebaut und wieder geschlossen

·       Unterstützt aktuell nur zustandslose Aufrufe

·       Man kann nicht einfach ein vorgefertigtes XML übergeben

 

 

 

Projektaufbau

Da wir xmlservice-ts als NPM-Paket installieren und verwenden möchten, werden wir unser Projekt wie folgt strukturieren:

xmlservice-ts Quelle: Güney

xmlservice-ts

 

Als Grundlage für das xmlservice-ts Paket wird folgendes Repository dienen: https://github.com/KerimG/typescript-module-starter

 

Projekt initialisieren

Zuerst klonen wir das oben genannte Repository, löschen den versteckten „.git“ Ordner und initiieren es als ein neues Repository:

neues RepositoryQuelle: Güney

neues Repository

 

Sobald das getan ist, sollten wir sofort die Meta-Informationen im package.json anpassen, eine Lizenzdatei hinzufügen und ein GitHub-Repository für das Projekt erstellen. Das erstellte Repository findet man hier: https://github.com/KerimG/xmlservice-ts

Nun können wir unsere Abhängigkeiten installieren. Was für Abhängigkeiten kann solch ein Projekt überhaupt haben? Da wir TypeScript verwenden wollen, ist der TypeScript-Compiler eine sogenannte „DevDependency“ also eine Entwicklungsabhängigkeit, die in der produktiven Version des Codes nicht mehr benötigt wird. Diese Liste der Dev-Abhängigkeiten sehen wir in unserer package.json und die Installation tätigen wir, wie üblich mit npm install.

Nach der Installation, sehen wir uns das Projekt im Editor an. Mein aktueller Lieblingseditor ist der Visual Studio Code:

Visual Studio CodeQuelle: Güney

Visual Studio Code

 

In unserem package.json sehen wir auch, dass einige Scripte hinterlegt sind. Das sind Befehle, die die Kompilierung und somit den Bau des Moduls mit nur einem Shell Befehl ermöglichen. Wir werden das Projekt in aktueller Form sofort bauen und auf NPM veröffentlichen. Natürlich existieren in unserem Projekt aktuell nur Beispielfunktionen, aber damit sichern wir uns den NPM-Paketnamen. Wenn man die NPM-Integration in Visual Studio Code und die Anzeige der NPM-Scripte aktiviert hat, können wir den Bauprozess in Visual Studio Code im unteren linken Bereich starten:

 

NPM-Integration in Visual Studio Code Quelle: Güney

NPM-Integration in Visual Studio Code

 

Bauprozess in Visual Studio Code Quelle: Güney

Bauprozess in Visual Studio Code

 

Mit den Befehlen npm login und npm publish können wir das Modul sehr einfach auf NPM veröffentlichen (ein NPM-Konto wird benötigt):

Befehle npm login und npm publishQuelle: Güney

Befehle npm login und npm publish

 

Das Ergebnis ist die Veröffentlichung der Version 0.1.0 des xmlservice-ts, unter der URL https://www.npmjs.com/package/xmlservice-ts zu finden!

Nun hat jeder die Möglichkeit das Modul mit npm i xmlservice-ts zu installieren und zu verwenden:

npm i xmlservice-tsQuelle: Güney

npm i xmlservice-ts

 

D. h. wir können das Modul in das xmlservice-konsument Projekt installieren und uns ansehen, ob unsere Dateien auch tatsächlich installiert wurden:

xmlservice-konsument Projekt Quelle: Güney

xmlservice-konsument Projekt

 

Sehr schön! Die kompilierten und gebauten Dateien wurden erfolgreich über NPM installiert und stehen uns zum Import zur Verfügung.

 

Damit haben wir den Aufbau unseres Projektes erfolgreich getätigt und im nächsten Teil der Serie können wir mit der eigentlichen Abstraktion vom xmlservice-cli beginnen!

Der Autor Kerim Güney schreibt regelmäßig für den TechKnowLetter.

Sie erreichen ihn unter:

kerim[at]gueney.io

Sechs Ausgaben des TechKnowLetters erhalten Sie hier für 88 Euro.

Workshops mit Kerim Güney zum Thema Node.js finden Sie in der MIDRANGE ACADEMY.