Javascript dependencies - ein Haufen voller Scheiße

Dass die Javascript-, ECMAScript- und auch Typescript-Dependencies-Welt nicht perfekt ist, muss man kaum erwähnen, aber ein Pull-Request auf Github zeigt nochmal, WIE kaputt die Denkweise ist.

Ich glaube, dass man nicht mehr extra betonen muss, dass ich kein Fan von Javascript oder Typescript bin. Die Umgebung zieht Idioten noch und nöcher an, die von Grundprinzip der Informatik noch nie gehört haben. Schlimmer noch: es zieht auch Leute an, die nur die Theorie der Informatik kennen und alles over-engineeren.

Hier treffen zwei Welten aufeinander: die Idioten und die Fach-Idioten. Das führt dazu, dass es NPM-Pakete gibt, die einfach keinen Sinn ergeben, weil die Sprache eigentlich zwar alles mitbringt, dies aber komplett verkackt hat.

Ein Paket durch Einzeiler ersetzt und Traffic um 30% reduziert

Der Pull-Request im Paket to-regex-range (da kommen wir gleich noch zu) führt dazu, dass ein Check, ob es sich beim Parameter um eine Zahl handelt, zukünftig nicht aus einem externen Paket kommt (WTF?!), sondern aus einem Einzeiler.

Wir reden hier von einem Check, der in statisch typisierten Programmiersprachen einfach Default ist. Das Paket widerum prüft, ob es sich um den Typ number handelt, wenn ja, subtrahiert es dann die Zahl von sich selbst und prüft, ob es 0 ergibt (ääääh, ja!) oder wenn es keine number ist, probiert das Paket nochmal auf zwei verschiedene Arten, ob es vielleicht doch noch eine Zahl ist. Beide Arten (Number.isFinite() und das globale isFinite()) haben unterschiedliche Ergebnisse.

Gut, wir haben also „irgendein“ Ergebnis. Und für dieses Ergebnis lädt man dann vor dem „Optimizer“ flockige 10 KB herunter. Klingt erstmal wenig, aber angeblich hat to-regex-range in einer Woche knapp 43 Millionen Downloads (WTF?!) und zieht jedes Mal die 10 KB mit sich. Der neue Einzeiler mit 115 Bytes ist da schon deutlich optimierter.

Regex-Range-Generator? WTF?

Also klar, einen regulären Ausdruck (eine Regex) zu generieren und zu testen, braucht man ab und zu mal. Aber warum nicht einen kleinen Webservice oder ein CLI-Tool anbieten, womit Entwickler sich den entsprechenden Ausdruck generieren können?

Nein, lieber eine Bibliothek bauen, die auf allen nutzenden Clients und Servern zwei Zahlen analysiert, diese dann in einen String und später in einen geparsten regulären Ausdruck konvertieren.

Hier sieht man einen kleinen Auszug aus den Compile-Times für… ja wofür eigentlich? Es steht nur „Compile time“ darüber. Aber gut, gehen wir mal davon aus, dass es der generierte reguläre Ausdruck ist, find ich es schon lustig, dass es wirklich Menschen zu geben scheint, die eine „Range“ angeben, bei dem beide Werte gleich sind und das über einen regulären Ausdruck testen.

Jetzt könnten wir hier mal darüber philosophieren, ob es sich dabei um die Idioten oder Fachidioten handelt, die so einen Bullshit machen und diese Library nutzen.

Diskussion darum noch lustiger

Natürlich konnte der Autor des Pakets es nicht auf sich sitzen lassen, dass es angeblich so viel Traffic sparen würde, da es bei der Entwicklung mit NPM immer dazu kommt, dass das gesamte Paket inkl. Tests, Doku etc. heruntergeladen wird, dies aber nicht im „optimierten“ Code der Distribution mitgenutzt wird.

Allerdings reden wir hier von den Downloads des Pakets mit NPM, also alle Devs und CI-Systeme, die schön clean alles runterladen und deployen. Ich denke, von den 43 Mio. Downloads sind circa 42,8 Mio. Downloads von CI-Systemen, da das Paket „offiziell“ nur in knapp über 2300 Open-Source-Paketen verwendet wird. Gehen wir mal von 10.000 Projekten aus (WTF?!), in denen Entwickler sitzen, die zu doof sind, ein paar Zahlen mit Regular Expressions zu validieren.

Die Diskussion darum ist doch aber genau das Problem: der Entwickler von is-number ist der Meinung, dass wildes Achselzucken gepaart mit Verteidigung der Größe des Pakets die angemessene Reaktion ist und hinterfragt natürlich nochmal, ob der Einzeiler denn auch gefälligst die Unit-Tests seines Pakets bestehen würde (Spoiler: tut er). Ich würde hinterfragen, warum die Sprache so scheiße ist, dass das nötig ist.

Ansonsten war das Team um das Regex-Range-Team lieber damit beschäftigt, kritische Kommentare zu löschen.

Tolle Neue Welt. Ich kann das alles nicht mehr.


Hier gibt es keinen Kommentarbereich. Hast du etwas zu kommentieren? Dann blogge einfach selbst. Oder schreib darüber mit deinem Kommentar in einem sozialen Netzwerk deiner Wahl.