Technologie · Laufzeitumgebung

Node.js — erst Werkzeug, dann Dienst

Node.js läuft bei uns in fast jedem Projekt, meistens aber auf dem Entwicklungsrechner und im Build. Es ist die Laufzeit, in der gebaut und geprüft wird: Vite, Bundling, Asset-Pipelines, Tests, Skripte für Importe und Migrationen. Als dauerhaft laufender Dienst setzen wir es gezielt ein — dann, wenn Ereignisverarbeitung oder Websockets tatsächlich gebraucht werden.

als Laufzeit für Build und Werkzeuge

Was ist Node.js?

Node.js ist bei uns vor allem Werkzeug-Laufzeit — ein eigener Node-Dienst entsteht nur, wenn er dem Projekt mehr bringt, als er im Betrieb kostet.

Wofür wir Node.js einsetzen

Zuerst für den Build. Jedes moderne Frontend braucht eine Laufzeit, die Assets bündelt, TypeScript übersetzt, CSS verarbeitet und Bilder aufbereitet. Bei uns ist das Vite, in Shopware 6 dessen eigener Build-Prozess, in TYPO3- und WordPress-Themes eine schlanke eigene Konfiguration. Dazu kommen Tests, Linting und Formatierung, die in derselben Laufzeit laufen. Wer diesen Teil nicht ordentlich aufsetzt, merkt es beim ersten Kollegen, bei dem der Build anders ausfällt.

Der zweite Einsatz sind Skripte, die nicht in die Anwendung gehören: Datenimporte, Migrationen zwischen Systemen, Aufbereitung von Medien, Aufrufe fremder APIs. Was davon in Node und was in Python entsteht, entscheidet die Aufgabe — hängt sie am Frontend-Ökosystem, bleibt sie in Node; geht es um Datenanalyse und Aufbereitung, ist Python die bessere Wahl. Drittens, seltener, echte Dienste: kleine APIs, Websocket-Verbindungen, Verarbeitung von Ereignissen.

Wie wir damit arbeiten

Die Node-Version wird im Projekt festgeschrieben, nicht dem Zufall auf dem Rechner überlassen. Abhängigkeiten stehen mit Lockfile im Repository, Builds laufen im Container, damit lokal und in der Continuous Integration dasselbe herauskommt. Bei Paketen sind wir zurückhaltend: Jede Abhängigkeit ist Code, den jemand aktualisieren muss, und eine Angriffsfläche über die Lieferkette. Ein npm-Baum, der für eine Handvoll Funktionen halbe Ökosysteme nachzieht, ist kein Fortschritt.

Läuft doch ein Dienst dauerhaft, behandeln wir ihn wie jede andere Anwendung im Betrieb: Prozessverwaltung, Neustartverhalten, Protokolle, Überwachung, Update-Pfad für Node selbst. Gehostet wird auf unseren eigenen Servern in Deutschland, im Proxmox-Cluster, mit Support Mo–Fr von 9:00 bis 16:00 Uhr. Die Betriebsfrage klären wir vor der ersten Zeile Code, nicht bei der Übergabe — sie entscheidet oft, ob der Dienst überhaupt gebaut wird.

Grenzen: wann kein Node-Dienst entsteht

Ein Node-Dienst ist schnell geschrieben und lange zu betreuen. Deshalb fragen wir zuerst, ob die Aufgabe nicht in die bestehende Symfony-Anwendung gehört — als Kommando, als Message-Handler, als Endpunkt. Dort gibt es bereits Deployment, Rechteverwaltung, Datenbankzugriff und jemanden, der sich auskennt. Ein zusätzlicher Dienst bedeutet einen zweiten Update-Zyklus, ein zweites Protokoll und im Zweifel den einen Prozess, an den nach zwei Jahren niemand mehr denkt.

Rechenintensive Arbeit gehört ebenfalls nicht in Node. Die Ereignisschleife ist stark bei vielen gleichzeitigen Verbindungen und schwach, sobald ein Vorgang die CPU längere Zeit belegt — dann steht alles andere. Bildverarbeitung, große Auswertungen, umfangreiche Datentransformation laufen bei uns in Python oder in einer Warteschlange außerhalb. Und für klassische Webanwendungen bleibt PHP 8 mit Symfony gesetzt. Node ist dort keine Verbesserung, sondern nur eine andere Sprache.

Häufige Fragen

Wann ist ein Node.js-Dienst die richtige Wahl?

Ein eigener Node.js-Dienst lohnt sich, wenn viele gleichzeitige Verbindungen offen bleiben müssen — Websockets, Benachrichtigungen, Ereignisverarbeitung in Echtzeit. In diesen Fällen spielt die Ereignisschleife ihre Stärke aus. Für alles, was ohnehin in einer Symfony-Anwendung stattfindet, ist ein zusätzlicher Dienst meist die teurere Lösung: Er bringt eigenes Deployment, eigene Überwachung und eigene Zuständigkeit mit. Die Frage lautet nicht, ob es geht, sondern ob es sich lohnt.

Hosten Sie Node.js-Anwendungen selbst?

Ja, Node.js-Anwendungen laufen bei Sharpness auf eigenen Servern in Deutschland, in einem Proxmox-PVE-Cluster. Zum Betrieb gehören Prozessverwaltung, Neustartverhalten, Protokolle, Überwachung und ein Plan, wie die Node-Version aktuell bleibt. Support gibt es montags bis freitags von 9:00 bis 16:00 Uhr, telefonisch unter 0441 21 21 63 0. Die Zuständigkeit für den späteren Betrieb klären wir vor der ersten Zeile Code.

Ersetzt Node.js unser PHP-Backend?

Nein, Node.js ersetzt ein PHP-Backend in aller Regel nicht. Shops, Portale und Fachanwendungen bauen wir mit PHP 8 und Symfony, weil dort das Ökosystem, der Betrieb und die Erfahrung liegen — Shopware 6 und TYPO3 setzen ohnehin darauf auf. Node.js ergänzt das an klar umrissenen Stellen: im Build, in Skripten und in Diensten für Ereignisse. Zwei Laufzeiten nebeneinander sind vertretbar, wenn jede eine Aufgabe hat.

Node.js im Bestand oder im Neubau?

Wir übernehmen auch Systeme, die woanders gebaut wurden — nach einem Blick in Code und Hosting.

Womit wir sonst arbeiten

Anrufen Projekt anfragen