lazy() moduleUrl with a leading slash never resolves: dev emits `//src/…`, the build manifest lookup misses
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Anfängerfreundlichkeit
- 55/100
- Issue-Typ
- Bug
- Klarheit
- Größtenteils klar
- Aktivitätsstatus
- Aktiv
- Tech-Stack
- typescript, vite
- Bereich
- build-system, tooling
Rechercherichtung
Start with devModuleUrl in src/dev-manifest.ts and the mirrored moduleUrl() in the generated devManifestCode in src/index.ts, then inspect manifest[moduleUrl] in packages/web/src/server.ts. Run the solid-v2/fullstack reproduction in the linked issue for both dev and production builds. Done means a leading-slash moduleUrl resolves consistently in both modes, or is rejected with a clear format error.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Summary
A lazy() call whose hand-written moduleUrl has a leading slash ("/src/Page.tsx") never resolves. The plugin's key format is project-relative (src/Page.tsx), and nothing normalizes the slash:
- Dev: the generated URL becomes protocol-relative (
//src/Page.tsx). The preload fetcheshttp://src/Page.tsxand fails, andhydrate()falls back to a client render. - Build: the client manifest has no
/src/Page.tsxkey. The server logsAsset manifest returned no client assets for module "/src/Page.tsx"and ships no root module map. On the client, hydration throwslazy() module "/src/Page.tsx" … was not preloaded before hydration, and reactivity halts.
This was split out of solidjs/solid#3338, where it reproduced the reporter's "page looks hydrated but every signal is dead" symptom.
Reproduction
From the reproduction on solidjs/solid#3338: the solid-v2/fullstack template (solid-js / @solidjs/web 2.0.0-rc.6, @solidjs/router 2.0.0-next.21, @solidjs/vite-plugin 3.0.0-next.39), with the <Loading> removed and a route component declared as:
const Page = lazy(() => import("./Page"), undefined, "/src/Page.tsx");
- Production build: the server logs
Asset manifest returned no client assets for module "/src/Page.tsx". The client throwslazy() module "/src/Page.tsx" (hydration id "…") was not preloaded before hydrationfrom the router outlet. Reactivity halts (REACTIVITY_HALTED). - Dev: the root module map is serialized as
//src/Page.tsx. The preload requestshttp://src/Page.tsx, fails, and the fallback client render dies with an unhandledHydration Mismatch … key: undefined.
The same key without the slash ("src/Page.tsx") hydrates and stays reactive in both modes. See also the first diagnosis comment.
Expected behavior
A leading / on a moduleUrl key names the same module as the project-relative key. Either:
- it's normalized (
/src/Page.tsx→src/Page.tsx) before the dev URL is built and before the build-manifest lookup, so both modes resolve the module; or - if a leading slash is meant to be invalid, it's rejected with a clear error naming the expected project-relative format, not a silent miss.
Where it likely lives
A hand-written third argument bypasses the compiler's lazy() pass (transformLazy only rewrites one- and two-argument calls). So the user's string reaches the resolvers as-is.
- Dev:
devModuleUrlinsrc/dev-manifest.tsand its mirrormoduleUrl()in the generateddevManifestCodeinsrc/index.ts. Both buildbase + "/" + key, which gives//src/Page.tsxfor a slash-prefixed key. The comment ondevManifestCodesays to keep the two in sync. - Build: the
virtual:solid-manifestloadhook insrc/index.tsexports the raw Vite manifest (viastampClientEntry). The key lookup itself ismanifest[moduleUrl]in@solidjs/web'sresolveAssets(packages/web/src/server.tsin solidjs/solid). The production half could be fixed on either side: the plugin normalizing keys in what it exports, or the runtime normalizing before lookup. That's worth deciding before a fix, so dev and build agree.
Related but distinct: #263 (Windows separators in generated keys), #298 (dev base and root-external keys), and #299 (query strings). None of them cover a leading slash on a hand-written key.
Filed on behalf of @ryansolid. — Claude via Cursor
- Vorherrschende Sprache
- TypeScript
- Sterne
- 522
- Forks
- 72
- Ø Merge
- 20 Std. 1 Min.
- Gemergte PRs (30 T.)
- 31
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Keine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus solidjs/solid-vite-plugin
-
Test environment detection doesn't consider Vitest workspacesEvtl. vergeben @carloitaben hat das vor 46 Tagen übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
solidjs/solid-vite-plugin#205 · 1 Kommentar · 2 Reaktionen ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 65/100
solidjs/solid-vite-plugin#394 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Catch-all route chunks are named `_...404_-<hash>.js`; the `..` trips path-traversal guards and breaks the lazy preloadEvtl. vergeben Ein verknüpfter Pull Request ist offen oder bereits gemergt. Offen
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 68/100
solidjs/solid-vite-plugin#391 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Start mode: generated entries render without the CSP nonce, and there is no per-request seam to supply oneEvtl. vergeben Ein verknüpfter Pull Request ist offen oder bereits gemergt. Offen
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 35/100
solidjs/solid-vite-plugin#388 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 68/100
solidjs/solid-vite-plugin#387 ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in solidjs/solid-vite-plugin
Ähnliche Issues
-
bug DUP Reservations
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 62/100
bcgov/reserve-rec-public#952 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
daufderheide/racecoordinator_ai#948 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Bug pulumi/pulumi
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
Maintainer antworten meist innerhalb von 1 Tag
-
bug priority:high
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
Maintainer antworten meist innerhalb von 1 Tag
-
api bug claude
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 84/100
diegosouzapw/OmniRoute#15764 ·
Maintainer antworten meist innerhalb von 2 Tagen