Javascript und sein Ökosystem

Diejenigen unter euch, die auch im IT-Bereich oder im IT-Nahen Umfeld tätig sind werden es sicher mitbekommen haben, wie ein 11-Zeilen Paket auf npm die halbe Javascript-welt zum Zusammenbruch gebracht hat.

Um welches Paket es geht? leftpad. Was macht leftpad? es fügt einem String ein padding bestehend aus einem frei wählbaren Zeichen hinzu, um den string auf die länge X zu bringen

also wäre ein via leftpad aufgefüllter string „test“ mit dem zeichen x auf länge 10 „xxxxxxtest“.

Man sieht also, eine absolut gerechtfertigte Abhängigkeit, denn man kann wirklich NIEMANDEM zumuten, diesen hoch komplexen Code selbst zu schreiben.

Ich meine, was läuft bei den Leuten im Kopf falsch, dass man eine Abhängigkeit eingeht, also dafür sorgt, dass der eigene Code nur dann funktioniert, wenn diese Abhängigkeit erfüllt ist, für ein stück Code, den man in etwa 3 Minuten intensivem Denkens selbst schreiben kann oder in 20 Sekunden einfach von Stackoverflow kopieren kann? Verdammt, man könnte auch den Code aus dem blöden npm Paket kopieren und das Problem so lösen, aber ich gehe doch keine Abhängigkeiten ein, wenn ich nicht sicher sein kann, dass diese auch in einiger Zeit (und ob das nun morgen oder in 3 Jahren ist, ist dabei egal) noch verfügbar ist?

Mein Blick darauf

Ich arbeite in einem GMP-regulierten Umfeld, das heißt nicht nur, dass wir alles Dokumentieren müssen was wir tun, sondern auch nachweisbar überprüfen müssen, dass es sinnvoll ist, etwas durchzuführen. Im konkreten Fall: Jede Abhängigkeit ist gut durchdacht und geplant. Wir setzen auf offene Standards soweit möglich (z.b. zwar RabbitMQ als Messagebroker, das setzt aber aufs offene AMQP-Protokoll, und kann damit, falls die Software irgendwann nicht mehr verfügbar sein sollte, einfach ersetzt werden). Ebenso unser Datenbank-System (PostgreSQL), dass schon seit 1994 Opensource ist und immernoch aktiv entwickelt wird.
Und wenn man nicht garantieren kann, dass die Abhängigkeiten auch in Zukunft noch erfüllt werden, dann muss man eben sein Buildsystem überdenken. So toll es auch ist, dass man im prinzip mittels „npm install“ alle nötigen pakete installiert hat, wenn es dann nicht hakt steht man da. Da kann man auch gleich alles einfach mit ins Repository packen und hat es bereit. Speicherplatz-Verbrauch ist komplett zu vernachlässigen, da das ganze nur ein mal abgespeichert wird, und danach nurnoch referenziert wird, solange es keine Änderungen in den Dateien gibt.
Alles toll, heile Welt, wunderbar.

Pustekuchen

Und man denkt, dass Pakete, die aktiv entwickelt werden, dann zumindest mittels „npm install“ ihre dependencies auflösen können und man dann daran entwickelt kann. Nein.

npm ERR! Windows_NT 6.1.7601
npm ERR! argv „C:\\Program Files (x86)\\nodejs\\node.exe“ „C:\\Program Files (x86)\\nodejs\\node_modules\\npm\\bin\\npm-cli.js“ „install“
npm ERR! node v0.12.2
npm ERR! npm v2.7.4
npm ERR! code ELIFECYCLE
npm ERR! obvious-closure-library@20140401.0.2 postinstall: `./bin/postinstall`
npm ERR! Exit status 1

npm ERR!
npm ERR! Failed at the obvious-closure-library@20140401.0.2 postinstall script ‚./bin/postinstall‘.
npm ERR! This is most likely a problem with the obvious-closure-library package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! ./bin/postinstall
npm ERR! You can get their info via:
npm ERR! npm owner ls obvious-closure-library
npm ERR! There is likely additional logging output above.
npm ERR! Please include the following file with any support request:
npm ERR! E:\Git\dygraphs\npm-debug.log

Eigentlich hatte ich vor mich an der Entwicklung von dygraphs etwas zu beteiligen, aber wenn ich erst noch Zeit reinstecken muss herauszufinden, wie ich denn meine Buildumgebung so gestaltet bekomme, dass ich irgendwas daran machen kann, vergeht mir schon die Lust.
Aber ich gebe ja nicht so leicht auf, ich dachte „ok, ich bin unter windows, vielleicht wenn ich das ganze unter Linux mit einer richtigen Bash starte funktioniert es, dann kopier ich das ganze Verzeichnis rüber und kann daran Arbeiten.“ … nix ist. Dort wurde mir dann auf der Konsole gesagt, dass die binary früher „node“ hieß und jetzt „nodejs“, das wollte ich dann mit einem symlink umgehen. Computer sagt nein.

Es wundert mich, dass Javascript überhaupt noch existiert… Mal sehen, wann es denn mal Alternativen geben wird.