PAS7 Studio

Node.js 25: was wirklich neu ist, was im Ökosystem kaputtging und ob sich ein Upgrade lohnt

Ein praxisnaher Blick auf Node.js 25 (Current): V8 14.1 und Performance, Web Storage standardmäßig aktiv (und dadurch Tests/Tools kaputt), Permission Model mit --allow-net, portabler Module Compile Cache (jetzt stable), require(esm) als stable markiert, http.setGlobalProxyFromEnv(), fs.watch mit ignore, und SEA in einem Schritt per node --build-sea. Entwickler-Perspektiven mit Links + klares Fazit: jetzt upgraden oder auf LTS warten?

Node.js 25 — Änderungen, Developer-Reaktionen und die Frage: upgraden oder warten?

Es gibt zwei Arten von Node-Upgrades. Die erste: „Version hoch, alles läuft“. Die zweite: „Version hoch, und plötzlich kommen browserartige Fehler im Backend“. Node.js 25 hat viele Teams in die zweite Kategorie geschubst.

Bei Docusaurus wirkt das absurd: DOMException [SecurityError]: Cannot initialize local storage without a --localstorage-file path beim docusaurus build.[1] Ähnliche Symptome tauchen auch bei CLIs (Shopify) und Test-Runnern (Jest/Vitest) auf.[2][3][4]

Wichtig: Das ist nicht einfach „ein zufälliger Bug in eurem Repo“. Es ist eine Folge davon, dass Node 25 Web Storage per Default aktiviert — und Node-localStorage ist eben kein 1:1 Browser-Storage (file-backed, Quota, shared, unencrypted).[7][5]

Und trotzdem: Node 25 ist mehr als die Web-Storage-Saga. 25.4.0 und 25.5.0 bringen reife Verbesserungen (require(esm) stable, Compile Cache stable, --build-sea), die Migrationen spürbar vereinfachen — wenn man sie bewusst einführt.[9][10][12]

Echter Fall: docusaurus build scheitert auf Node 25.x wegen localStorage SecurityError.[1]

Screenshot des Abschnitts prologue

Node 25 ist eine Current-Line (odd). Sie entwickelt sich schnell: neue Defaults, dann Edge-Cases, dann Stabilisierung.[6]

  • 25.0.0: V8 14.1, Performance-Fokus, Web APIs, Permission Model, Web Storage per Default.[8]

  • 25.2.0: die localStorage-Regression ohne --localstorage-file taucht auf (nodejs/node #60704) und trifft Toolchains.[5]

  • 25.4.0: require(esm) wird stable, Module Compile Cache wird stable, Ops-Features wie http.setGlobalProxyFromEnv() kommen dazu.[9]

  • 25.5.0: node --build-sea kommt — SEA „in einem Schritt aus dem Core“, plus kleine, aber wichtige Ops/Monorepo-Änderungen.[12]

Genug Vokabular, damit Node 25 als Text Sinn ergibt.

  • Current vs LTS: odd major = Current, even major = LTS-Line. Node empfiehlt Production auf Active/Maintenance LTS.[6]

  • Web Storage in Node: localStorage ist file-backed (--localstorage-file), unencrypted, hat 10MB Quota, und ist im Serverprozess shared.[7]

  • Permission Model: Prozess-Permissions (--permission, --allow-net, --allow-fs-read) als „Gurt“. Kein Sandbox, keine Garantien gegen malicious code.[11]

  • require(esm): Brücke zwischen CJS und ESM. 25.4.0 markiert das als stable (relevant für Migrationsstrategien).[9]

  • Module Compile Cache: on-disk Code Cache für schnellere Modul-Compilation, inkl. portable Mode.[10]

  • SEA: Single Executable Applications. 25.5.0 macht es einfacher via --build-sea.[12][13]

  • Ops QoL: Proxy aus env (http.setGlobalProxyFromEnv()), Watcher ignore (fs.watch({ ignore: ... })).[14][15]

25.0.0 ist das Fundament: V8 14.1, Performance, Web APIs und Legacy-Cleanup. Die „Reife“ der Line zeigt sich in 25.4/25.5.[8][9][12]

14.1

Die 25.0.0 Notes heben Performance-Arbeit hervor, u. a. bei JSON.stringify.[8]

Default an

Ein Default-Change, der Ecosystem-Regressions (Tools/Tests/CLIs) ausgelöst hat.[8][5][4]

permissions

Permissions als secure-by-default, aber mit klaren Grenzen (kein Sandbox).[11]

deprecations

Major-Releases tun oft weh durch Entfernen deprecated APIs (SlowBuffer).[16]

Visueller Startpunkt der Linie: Node.js 25.0.0 (Current).[8]

Screenshot des Abschnitts node-25-0

Das Problem ist nicht, dass Web Storage „schlecht“ wäre. Das Problem ist, dass der Default geändert wurde, und Tooling auf einmal Codepfade ausführt, die nie serverseitig getestet wurden.

nodejs/node #60704 beschreibt die 25.2.0 Regression: “Cannot initialize local storage without a --localstorage-file path” und verweist auf kaputte Toolchains (webpack/jest/html-webpack-plugin).[5]

Vitest #8757 zeigt einen anderen Failure Mode: In Node 25 ist localStorage nicht mehr undefined, was Mocks in Test-Umgebungen brechen kann.[4] Jest #15888 ist ein weiterer Beleg: der Runner scheitert mit SecurityError auf Node 25.2.0.[3]

Schneller Incident-Workaround (wenn Storage nicht gebraucht wird): Web Storage temporär per Flag deaktivieren (steht in den globals docs).[7]

Team-Lektion: Auch wenn ihr „kein localStorage nutzt“, eure Dependencies könnten. Deshalb ist Current in CI als Frühwarnsystem sinnvoll.[6]

nodejs/node #60704: 25.2.0 Regression — localStorage ohne --localstorage-file kann Builds killen.[5]

Screenshot des Abschnitts webstorage-saga

Vitest #8757: Web Storage Default kann Tests brechen, weil Erwartungen an localStorage sich ändern.[4]

Screenshot des Abschnitts webstorage-saga

Jest #15888: Runner scheitert mit SecurityError auf Node 25.2.0.[3]

Screenshot des Abschnitts webstorage-saga

Eine dieser Änderungen, die nicht laut ist, aber in großen Repos wochenlang Arbeit spart.

1) Warum es zählt

Wenn Packages ESM-only werden, stolpert CJS-Code über ERR_REQUIRE_ESM. Eine reifere Brücke ermöglicht schrittweise Migration statt Big-Bang Rewrite.[9][22]

2) Praktisches Pattern: Adapter für default export

JS
const pkg = require('some-esm-only-package');
const api = pkg?.default ?? pkg;

module.exports = api;

Das ist ein übliches Pattern für den namespace object, wenn ESM default export liefert.[22]

3) Was es für Teams signalisiert

Stabilisierung in Current bereitet den Weg fürs Ökosystem. LTS+Current in CI bringt Nutzen ohne Prod-Risiko.[6]

Visueller Marker eines Stabilisierungspunkts: Node.js 25.4.0 (Current).[9]

Screenshot des Abschnitts require-esm

Compile Cache ist eine Optimierung. Sie hilft besonders bei vielen Cold Starts oder großen Modulgraphen (Tools, CLI, Worker).

Die node:module Docs erklären Portabilität sehr konkret: Wenn absolute Pfade sich ändern, verliert der Cache an Effektivität; portable hilft beim Reuse.[10]

Minimaler Versuch:

JS
import module from 'node:module';

module.enableCompileCache({ directory: '.node-compile-cache', portable: true });

In CI lohnt es sich, das Cache-Verzeichnis explizit zu managen, damit es nicht “verdampft”.

Docs: „Portability of the compile cache“ + portable Mode mit API/env Beispielen.[10]

Screenshot des Abschnitts compile-cache

Eine der produktivsten Änderungen in der Line: Single Executable bauen sieht nicht mehr wie ein externes Injector-Ritual aus.

1) Kerngedanke

25.5.0 führt --build-sea ein und konsolidiert die bisherigen SEA-Schritte in einen Step direkt im Core.[12][13]

BASH
echo 'console.log("Hello")' > hello.js
echo '{ "main": "hello.js", "output": "sea" }' > sea-config.json
node --build-sea sea-config.json
./sea

2) Praxis-Fazit

Für CLI/Agents: weniger Dependencies und weniger fragile Release-Schritte. Aber testet auf Ziel-OS/Shells (es gibt Berichte zu Windows Command Prompt).[21]

3) Team-Hinweis

SEA ist Distribution, nicht Security. Pflege weiterhin Dependencies und Supply Chain. Current in CI bleibt dein Frühwarnsystem.[6]

25.5.0: --build-sea Abschnitt plus Command-Beispiel in den offiziellen Notes.[12]

Screenshot des Abschnitts sea-build-sea

Keine „Headline“, aber ein DX-Gewinn: weniger kleine Proxy-Wrapper in Projekten mit Enterprise-CI.

Minimal:

JS
import http from 'node:http';

const restore = http.setGlobalProxyFromEnv();
// restore();

http.setGlobalProxyFromEnv()

Hilfreich, wenn Proxy via env gesteuert wird (CI/Enterprise Networks).[14]

beim Start aufrufen

Nicht mitten in Requests; im Bootstrap von Service/CLI.[14]

konsistenter

Weniger unterschiedliche Konfigurationen pro HTTP-Client.

Docs: http.setGlobalProxyFromEnv([proxyEnv]) + built-in proxy support.[14]

Screenshot des Abschnitts ops-qol

In großen Repos sind Watcher ein eigener Schmerz (node_modules, .git, Generated Output). Die Docs beschreiben ignore als Option (glob/RegExp/function/array).[15]

Minimalbeispiel:

JS
import { watch } from 'node:fs';

watch('.', {
  recursive: true,
  ignore: ['**/node_modules/**', '**/.git/**'],
}, () => {});

Major-Releases tun oft weh durch Deprication-Finalisierung. SlowBuffer ist das Paradebeispiel.[16]

1) Was passierte mit SlowBuffer?

Die Deprecations Docs sagen: SlowBuffer wurde entfernt; nutze Buffer.allocUnsafeSlow(size).[16]

2) Wie es in der Praxis aussieht

Ein reales Beispiel: Backend crash auf Node 25.x durch eine Dependency Chain, die SlowBuffer.prototype nutzt.[17]

3) Schneller Pre-Upgrade Scan

BASH
rg -n "\bSlowBuffer\b" .

Dann pnpm why / npm ls, um die Legacy-Kette zu finden.

Kurze, praxisnahe Checkliste.

  • 1) Prod auf LTS, Node 25 in CI (LTS + Current Matrix).[6]

  • 2) Tests mit deaktiviertem Web Storage laufen lassen, um schnell zu isolieren: NODE_OPTIONS="--no-experimental-webstorage".[7]

  • 3) Wenn es bricht: schau, wo es schon bricht: nodejs/node #60704, Vitest #8757, Jest #15888.[5][4][3]

  • 4) Features aus 25.4/25.5 zuerst isoliert testen (CLI/Worker), nicht „Prod Runtime umstellen und hoffen“.[9][12]

  • 5) Monorepo: Watcher tunen: fs.watch({ ignore }) reduziert Last.[15]

  • 6) Corporate CI: http.setGlobalProxyFromEnv() testen als globaler Proxy-Weg.[14]

Ohne Religion: Node 25 ist super als CI-Frühwarnsystem und für bestimmte Produkte (CLI/Agents). Für Production Backends gewinnt meist LTS durch Stabilität.

Eher warten / LTS

Node empfiehlt Production auf Active/Maintenance LTS.[6]

Jetzt hinzufügen

Node 25 zeigt Regressionen (Web Storage) und Legacy Cleanup (SlowBuffer) früh, ohne Prod-Incident.[5][16]

Upgrade ist sinnvoll

--build-sea (25.5.0) + Reife in 25.4.0 sind echte DX-Wins. Teste Ziel-OS/Shells.[12][21]

Current darf “beißen”

Current existiert, damit das Ökosystem adaptiert. Wenn es nervt: in CI behalten, Prod auf LTS lassen.[6]

Ist Node.js 25 ein LTS-Release?

Nein. Es ist Current (odd major). Node sagt explizit: Production soll auf Active oder Maintenance LTS laufen.[6]

Warum ist Web Storage so laut eskaliert?

Weil der Default geändert wurde. `localStorage` ist ohne Experimental-Flag verfügbar, aber die Node-Semantik unterscheidet sich (file, 10MB, shared). Tooling-Annahmen brechen.[7][5][4]

Wie entsperre ich CI schnell, wenn localStorage alles bricht?

Web Storage temporär per `NODE_OPTIONS="--no-experimental-webstorage"` deaktivieren (oder per Flag). Das ist in den globals docs dokumentiert und wird als Workaround referenziert.[7][5]

Kann ich SEA mit --build-sea schon nutzen?

Ja, aber teste Ziel-OS/Shells. Es gibt ein Windows Command Prompt spezifisches Issue.[21] Details siehe SEA Docs.[13]

Quellen in Erscheinungsreihenfolge (Position = [n]).

Für die meisten Teams: Prod auf LTS, Node 25 in CI als Frühwarnsystem, und 25.4/25.5 Features (require(esm), Compile Cache, build-sea) zuerst in isolierten Experimenten (CLI/Worker). DX hoch, Risiko runter.

Verwandte Artikel

ai-assistants

AI Assistant Entwicklung Kosten 2026: RAG, Knowledge Base, Integrationen und Support

Praktischer Leitfaden zu Kosten fuer AI Assistants: RAG, Knowledge Base, Channels, Tool Use, Guardrails, Evaluations, Monitoring und Support.

blogs

AI-assisted Attacks und Prompt Injection 2026: neue Angriffsfläche für AI-Produkte

AI-assisted Attacks und Prompt Injection 2026: neue Angriffsfläche für AI-Produkte. Ein praktischer PAS7-Studio-Sicherheitsleitfaden mit Threat Model, Kontrollen, Rollout-Checklist, Fehlern und Quellen.

blogs

KI fur Landingpage-Entwicklung: wo sie Launches beschleunigt und wo sie Conversion schadet

Eine praxisnahe Analyse zur Nutzung von KI fur Landingpages: v0, Webflow AI, Builder.io, Framer-ahnliche Builder, UX-Generierung, Copy, SEO, Personalisierung, A/B-Tests, Template-Risiken, Accessibility, Security und technischer Schuldenaufbau.

growth

AI SEO / GEO im Jahr 2026: Ihre nächsten Kunden sind nicht Menschen — sondern Agents

Suche verschiebt sich von Klicks zu Antworten. Bots und AI-Agents crawlen, zitieren, empfehlen — und kaufen zunehmend. Erfahren Sie, was AI SEO / GEO bedeutet, warum klassisches SEO nicht mehr reicht und wie PAS7 Studio Marken im agentischen Web sichtbar macht.

Professionelle Entwicklung für Ihr Geschäft

Wir erstellen moderne Web-Lösungen und Bots für Unternehmen. Erfahren Sie, wie wir Ihnen helfen können, Ihre Ziele zu erreichen.