Vorwort
Das erste Mal in Kontakt kam ich mit Node.js vor ungefähr acht Jahren: Im Jahr 2011 arbeitete ich beim Fraunhofer-Institut für Angewandte Informationstechnik an einer Software zur Evaluierung von Websites hinsichtlich Aspekten wie Barrierefreiheit, Suchmaschinenoptimierung, Corporate Identity und Web Compliance im Allgemeinen. Die Software war in der ersten Version unter Verwendung des GUI-Frameworks Swing als reine Java-Desktopanwendung implementiert und später in Version 2 als Client-/Server-Webanwendung auf Basis von Webservices migriert worden.
Die Software war zwar stabil, aber mit der Zeit merkten wir, dass wir immer mehr an die Grenzen von Java stießen. Bei den Websites, die mit der Software evaluiert werden sollten, handelte es sich größtenteils nicht mehr um statische Websites, sondern um Single-Page Applications, was wiederum verlangte, diese Applikationen auch auf Server-Seite zu rendern, um eine aussagekräftige Evaluierung durchführen zu können. Da die Möglichkeiten, die Java diesbezüglich zu dieser Zeit bot, für uns nicht zufriedenstellend waren, suchten wir nach Alternativen und fanden sie in dem Headless Browser PhantomJS, einem Browser ohne grafische Oberfläche, der über JavaScript gesteuert werden kann.
Mit diesem ersten Schritt von Java in Richtung JavaScript führte eines zum anderen, und wir entschieden uns, im Hinblick auf Version 3 der Software zunächst einzelne Komponenten und im Laufe des anschließenden Refactorings nahezu alle Komponenten in JavaScript neu zu schreiben. Ausschlaggebender Punkt dafür war aber nicht PhantomJS, sondern ein anderer neuer Player im JavaScript-Universum: die Laufzeitumgebung Node.js (damals noch in Version 0.1), die es überhaupt erst möglich machte, JavaScript effizient auf dem Server auszuführen, und die aus genau diesem Grund maßgeblich für den erneuten Erfolg von JavaScript mitverantwortlich war und immer noch ist.
Der Erfolg von JavaScript und Node.js ist nach wie vor ungebrochen. Ob im Bereich von Webanwendungen, mobiler Anwendungen, IoT-Anwendungen, Desktopanwendungen oder im Rahmen des Build-Prozesses. Ob auf einem herkömmlichen Server, in der Cloud oder auf einem Minicomputer wie dem Raspberry Pi: JavaScript und damit Node.js spielt mittlerweile in allen Bereichen eine wichtige Rolle und ist damit eine ernstzunehmende Konkurrenz für »die großen Sprachen« Java, C# oder PHP.
Aktuelle Umfragen, Trends und die Popularität von Node.js-Projekten bei GitHub sind nur einige Indikatoren hierfür. Hinzu kommt die große Community und die Menge an Open-Source-Projekten: So listet bspw. die Package-Registry des Node.js Package Managers derzeit mehr als 1.000.000 Packages (zum Vergleich: Vor etwa einem Jahr waren es noch rund 700.000 Packages) auf. Zudem gelten Node.js-Anwendungen als äußerst performant, sind dank nicht blockierender Ein- und Ausgabe hervorragend skalierbar und – auch aus Projektmanagementsicht – insofern erstrebenswert, als dass im besten Fall die gleichen JavaScript-Entwickler, die das Frontend entwickeln, auch in der Lage sind, das Backend zu entwickeln.
Doch wie soll man sich im Dschungel der Packages zurechtfinden, und welche Aspekte sind relevant für die Implementierung von Node.js-Projekten?
In diesem Buch habe ich Ihnen eine repräsentative Auswahl von praxiserprobten Techniken und