Kompatibilität und Einschränkungen
Das Ziel ist Cloudflare Workers, kein eigenständiger Node.js-Prozess. Das Node-Profil verwendet workerd 1.20261012.1 mit dem Kompatibilitätsdatum 2026-10-17 ohne zusätzliche Flags. Andere Daten und Flags werden von diesem Profil nicht abgedeckt. Die WebView enthält weder workerd noch V8; iOS verwendet seine eigene JavaScript-Engine.
Die früheren Paketversionen workers-capacitor 0.1.0 Preview und die ausdrücklich freigegebene Folgeversion 0.1.1 Preview enthalten bestehende Kompatibilitätsimplementierungen mit den folgenden Grenzen im Rahmen einer versionsspezifischen Releaseausnahme. Die ausdrücklich freigegebene cf-workers-native@0.1.2 Preview behält die dokumentierten Einschränkungen unter ihrer Releaseausnahme. Die Aufnahme behauptet keine vollständige Workers- oder Node.js-Kompatibilität.
Native Hosts
| Host | Umfang |
|---|---|
| iOS-Einbettung | SwiftPM-Produkt WorkersIOS in 0.1.2 Preview für UIKit/SwiftUI. Vor dem Entfernen eines UIKit-Controllers schließen; SwiftUI-Abbau schließt automatisch. |
| Android-Einbettung | Lokale Maven-SDK-Veröffentlichung; kein öffentliches Maven-Release. Benötigt WebView-MULTI_PROFILE; jeweils ein SDK-Bildschirm, mit dauerhaften, von Host-Cookies isolierten SDK-Cookies. |
| Capacitor | Bestehende Capacitor-8-Integration, geprüft mit 8.5.3; verwenden Sie diesen Weg für allgemeine native Plugins. |
0.1.2 Preview verwendet den npm-Namen cf-workers-native; installieren Sie es nach der Veröffentlichung. Einbettungs-Hosts benötigen übereinstimmende JS-/Native-Versionen und sind im früheren Release workers-capacitor@0.1.1 nicht enthalten. Beide erkennen einen unvollständigen Start nach 30 Sekunden. Sie verwenden Laufzeit und Buildwerkzeuge wieder und behalten daher die folgenden API-/Framework-Grenzen. Plattformverhalten beschreibt Einbettungseinrichtung und Lebenszyklus, hostspezifische Nachweise der Verifikationsumfang.
Node.js
Die Kompatibilität mit Node.js insgesamt ist noch unvollständig. Ein erfolgreicher Modulimport weist keine gleichwertigen Methoden, Validierung, Zustände, Zeitplanung oder Engine-Verhalten nach.
| Bereich | Verhalten und Einschränkungen |
|---|---|
| path, querystring, string_decoder, buffer, timers | Implementieren das gepinnte Workers-Profil. Workers-Stubs bleiben Stubs; beispielsweise reproduziert matchesGlob die Ablehnung des gepinnten Profils. |
| HTTP und net | In-Memory-Server-Dispatch; kein lauschender Betriebssystemserver. Ausgehendes TCP/TLS erfordert den nativen Transport. |
| fs / fs/promises | Schreibgeschützte eingebettete virtuelle Dateien. Schreiben, FileHandle, watch und vollständige Dateisystemsemantik werden nicht unterstützt. |
| module | Begrenzte Builtin-Registry; createRequire lädt ausschließlich VFS-JSON. Ausführbare Module müssen gebündelt sein; beliebige dynamische Auflösung wird nicht unterstützt. |
| process, events, console, util / util/types / sys | Unvollständige Exporte oder Verhaltensweisen. Engine-Introspektion, Aufrufstellen und Host-Objekt-Erkennung sind nicht gleichwertig mit Workers. |
| crypto und zlib | Implementierungen aus Abhängigkeiten decken nicht alle Workers-Exporte, Algorithmen, Schlüssel oder Codecs ab. Gehen Sie nicht von Kryptografie- oder Kompressionsparität aus. |
| TLS- und HTTP-Interna | node:tls ist unvollständig. _http_common, _http_outgoing, _http_server, _tls_wrap und _stream_wrap bestehen die Importprüfung nicht. Nativer TLS-Transport impliziert keine Node-TLS-API-Kompatibilität. |
| Streams | Ein gepackter Fallback liefert Byte-Streams, wenn der Host sie nicht hat. Workers-tee-Abbruchgründe und das Timing von pipeTo-Abbrüchen werden nicht vollständig reproduziert. |
| async_hooks | Durch den Build transformierte asynchrone Funktionen behalten bereichsgebundene Stores. Nicht transformierte native asynchrone Callbacks werden abgelehnt; beliebiger dynamischer Code und Isolation des Anfrageursprungs werden nicht vollständig unterstützt. |
| diagnostics_channel | Synchrone Channel-/Store-Verträge sind implementiert; asynchrone Weitergabe hängt von den async-hooks-Einschränkungen ab. |
| worker_threads | Workers-Stubs und lokales MessagePort-Verhalten, keine Node-Threads. Kennzeichnung vertrauenswürdiger Ereignisse, Host-Objekt-Serialisierung und globale Identität weichen ab. |
| DNS | DNS-over-HTTPS-Implementierung; synthetische Service-Binding-/Hyperdrive-Adressüberschreibungen sind nicht implementiert. |
| Andere Module | Implementierungen und gemeinsame Contracts existieren, aber die Abnahme vollständiger Module steht aus. Namespace-Gleichheit allein reicht nicht aus. |
Die genaue Basis fehlender/zusätzlicher Exporte wird in surface-gaps.json gegenüber den gepinnten Exporten gepflegt. Diese Dateien sind die maßgebliche Quelle; diese Anleitung dupliziert die Exportliste nicht. Führen Sie zur Prüfung npm run build und anschließend npm run test:node-inventory --prefix demo aus. Verhaltensverträge liegen neben jeder Implementierung in src/compat.
Nicht funktionale Workers-Module erhalten keine Gerätefähigkeiten: VM-Isolate, Prozessstart, V8-Heap-Zugriff, UDP-Sockets und ein Betriebssystemterminal werden nicht bereitgestellt. node:test stellt die Workers-Mock-API bereit, nicht Nodes vollständigen Test-Runner.
Workers-APIs und Bindings
passThroughOnException, lokales WorkerEntrypoint/RPC, Cache API und HTMLRewriter werden nicht unterstützt. Scheduled-/Queue-/Workflow-Lebenszyklen werden nicht lokal simuliert.cloudflare:workersist partiell. Der isolierte Dispatcher aktualisiert einen realmweitenenv-Proxy; direkte Ausführung befüllt ihn nicht. Er ist nicht anfragegebunden und wird vor dem ersten Dispatch nicht befüllt. Bevorzugen Sie das Fetch-Handler-Argument. DurableObject ist eine Konstruktorhülle, keine lokale Durable-Objects-Laufzeit.Request.cfbewahrt übergebene Werte; es erzeugt keine Cloudflare-Metadaten.- Lokales KV verwendet Gerätespeicher ohne Cloud-Replikation oder Binding-RPC.
- D1, Hyperdrive, R2, Service Bindings, Queue-Produzenten und andere Cloud-Dienste werden entfernt über den HTTP-Handler des bereitgestellten Workers ausgeführt. Sie sind keine lokalen Dienstimplementierungen. Lokales ASSETS wird nicht unterstützt; verwenden Sie die explizite entfernte Asset-Richtlinie.
Native Netzwerkkommunikation
HTTP/1.1-Framing, Weiterleitungen und Antwortparsing laufen in JavaScript/Wasm. Nativer Code stellt TCP/TLS und WebView-Lebenszyklushooks bereit. Jede HTTP-Anfrage verwendet eine Verbindung mit Connection: close; nach dem Senden gibt es keine implizite Wiederholung.
- HTTPS benötigt Content-Length oder Chunked-Framing. EOF-begrenztes HTTPS wird abgelehnt, da die Byte-Bridge authentifiziertes Schließen nicht von Abschneiden unterscheiden kann. Einfaches HTTP unterstützt EOF-Framing.
- Trailer werden geparst, aber nicht als Fetch-Antwortheader bereitgestellt. HTTP/2, Protokollupgrades und CONNECT werden von diesem HTTP/1.1-Transport nicht unterstützt.
- Socket-Lese-/Schreibzugriffe sind auf 64 KiB begrenzt; Headertext ist über Informations-/finale Header und Trailer hinweg auf 64 KiB begrenzt. Lesezugriffe folgen dem Bedarf des Consumers.
- Browserausführung behält CORS-/Header-/Cookie-Beschränkungen des Browsers bei. Nativer Transport verspricht keinen browsergleichen SameSite- oder CSRF-Schutz.
- Beendigung durch das Betriebssystem kann Hintergrundarbeit stoppen. Ausgewählte Szenarien decken physische Geräte ab; das Geräteverhalten Ihrer Anwendung, Wiederherstellung nach WebView-Abstürzen und Speicherdruck erfordern separate Validierung.
Dokumentrendering
Remote-HTML wird am app-lokalen Origin dargestellt (capacitor://localhost unter iOS, https://workers-sdk.local im Android-Einbettungs-Host und normalerweise https://localhost in einer Capacitor-Android-App). Remote-Ausführung hält Servercode und Cloud-Dienste auf dem Worker; sie macht die WebView nicht zum Origin dieser Website und liefert nicht jede Browser-Authentifizierungsfunktion. Prüfen Sie Hydration und interaktive Bedienelemente, nicht nur eine erfolgreiche HTML-Antwort.
Grenzen der Anwendungsintegration
| Funktion | Aktuelle Grenze | Integrationshinweis |
|---|---|---|
| Better Auth mit abgeleiteter Client-Basis-URL | Die festgeschriebene flare-stack-blog-Anwendung scheitert unter iOS bei der Clientinitialisierung, weil Better Auth capacitor://localhost ablehnt. Androids HTTP(S)-Origin trifft diese Ablehnung nicht. |
Ein expliziter HTTPS-Authentifizierungsendpunkt initialisiert den Client, aber dessen vollständiger Login-/Cookie-Ablauf wurde hier nicht validiert. Diese Einstellung allein schließt die Migration nicht nachweislich ab. Siehe Reproduktion. |
| Passkeys / WebAuthn und PRF | Native Passkey-Registrierung in pknotes schlägt auf beiden getesteten Plattformen fehl. Chromiums virtueller Authenticator belegt keine native Unterstützung. | Native Zugangsdatenintegration, App-/Domainzuordnung und PRF-Verfügbarkeit benötigen separate Validierung. Remote-Rendering kann Relying-Party-Origin-Prüfungen nicht umgehen. Native Unterstützung ist aufgeschoben, nicht als technisch unmöglich bewiesen. Siehe Authentifizierungsgrenze. |
| Void React Pages | Void / @void/react 1.1.12 deckt Remote-D1-Abläufe und ausdrücklich erlaubte öffentliche GET-Routenausführung einschließlich SSR und Hydration auf iOS-Simulator und Android-Emulator ab. Andere Void-Frameworks und lokale Ausführung des gesamten Workers sind ungeprüft. | Verwenden Sie für iOS-Navigation mit eigenem Schema 1.1.12 oder neuer. Siehe Void-Integration und Verifikationsumfang. |
| OAuth über externen Browser | Das Beispiel prüft synthetische lokale und öffentliche HTTPS-Testaussteller, PKCE, Callback-Verarbeitung und Sitzungsaustausch, auch auf einem physischen iPhone. Echte Anbieterrichtlinien, Refresh-Token-Speicherung und Wiederaufnahme nach Kaltstart sind nicht abgedeckt. | Verwenden Sie nach Möglichkeit das native SDK des Anbieters. Systembrowser-Cookies werden nicht automatisch mit der WebView geteilt. Siehe Authentifizierungsbeispiel. |
| Analytics Engine und andere reine Cloud-Dienste | Analytics Engine läuft in Cloudflare; es gibt keine lokale Dataset-Implementierung. Counterscales Live-Szenario benötigt ein eingerichtetes Konto, Ereignisse und ein Analytics-Lesetoken. | Behalten Sie privilegierte Tokens im Backend und authentifizieren Sie Geräteanfragen. Das standardmäßige CI-Authentifizierungsszenario führt keine Live-Analytics aus. Siehe Counterscale-Einrichtung. |
| Bildoptimierung und Geräteleistung | Das OpenNext-Fixture deckt lokales workerd und bereitgestelltes Cloudflare IMAGES ab, einschließlich Rendering auf einem physischen iPhone. Leistungsmessungen sind einzelne Debug-Läufe; physischer iOS-Speicher wurde nicht gemessen. | Prüfen Sie die produktive Bildkonfiguration und messen Sie Release-Build-Start und Speicher auf physischen Geräten vor Leistungsaussagen. Siehe OpenNext-Lücken. |
Gepinnte Drittanbieter-Fixtures prüfen konkrete Benutzerabläufe ohne Änderung ihres Anwendungsquellcodes; sie zertifizieren nicht jede Funktion oder zukünftige Version. Die meisten verwenden lokales workerd hinter HTTPS als entferntes Backend. Live Analytics Engine und das öffentliche HTTPS-D1-/Images-Szenario von OpenNext sind ausdrücklich konfigurierte Ausnahmen. Prüfen Sie die Szenarioumfangsbeschreibungen, bevor Sie sich bei einer Produktionsintegration auf ein Ergebnis verlassen.
Navigations-, Formularupload-, Weiterleitungs-, Vertrauens- und Lebenszyklusgrenzen beschreibt natives Dokumentrendering. Browser-Service-Worker-Vergleiche erwarten ausdrücklich, dass WebKit wiederholte POST-Bodies verliert und bei synthetischen Weiterleitungen redirected: false meldet. Alle anderen Zusicherungen bleiben erforderlich; diese Erwartungen dokumentieren Browsergrenzen, kein unterstütztes Verhalten. iOS verwendet eine andere native Schema-Bridge. Browserergebnisse ersetzen keine iOS-/Android-Validierung.