PAS7 Studio
Zurück zu allen Artikeln

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]).

0

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

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.

blogs

Der leistungsstärkste Chip von Apple? M5 Pro und M5 Max brechen Rekorde

Eine Analyse zu Apple M5 Pro und M5 Max im März 2026. Wir zeigen, warum diese Chips als die stärksten professionellen Laptop-SoCs von Apple gelten können, wie sie sich gegen M4 Pro, M4 Max, M1 Pro, M1 Max schlagen und was der Vergleich mit aktuellen Intel- und AMD-Chips zeigt.

blogs

Artemis II und der Code, der Menschen zum Mond trägt

Dieser Beitrag erklärt die NASA-Mission Artemis II, die am 1. April 2026 gestartet ist, und zeigt, was sie wirklich über moderne Technik erzählt: Flugsoftware, Backup-Logik, Simulationen, Telemetrie, menschliche Kontrolle und die vorsichtige Rolle von KI in Raumfahrtsystemen.

telegram-media-saver

Automatisches Tagging und Suche für gespeicherte Links

Integration mit GDrive/S3/Notion für automatisches Tagging und schnelle Suche über Such-APIs

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.