lazy() moduleUrl with a leading slash never resolves: dev emits `//src/…`, the build manifest lookup misses
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 55/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Attiva
- Stack tecnologico
- typescript, vite
- Ambito
- build-system, tooling
Direzione di ricerca
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.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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
- Lingua principale
- TypeScript
- Stelle
- 522
- Fork
- 72
- Merge medio
- 20h 1m
- PR unite (30g)
- 31
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di solidjs/solid-vite-plugin
-
Test environment detection doesn't consider Vitest workspacesForse già presa @carloitaben l’ha presa 46 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
solidjs/solid-vite-plugin#205 · 1 commento · 2 reazioni ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 65/100
solidjs/solid-vite-plugin#394 ·
I maintainer di solito rispondono entro 1 giorno
-
Catch-all route chunks are named `_...404_-<hash>.js`; the `..` trips path-traversal guards and breaks the lazy preloadForse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 68/100
solidjs/solid-vite-plugin#391 ·
I maintainer di solito rispondono entro 1 giorno
-
Start mode: generated entries render without the CSP nonce, and there is no per-request seam to supply oneForse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
solidjs/solid-vite-plugin#388 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 68/100
solidjs/solid-vite-plugin#387 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di solidjs/solid-vite-plugin
Issue simili
-
ble-needs-fable-review bug mobile priority:P2
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
ColeMurray/background-agents#2305 ·
I maintainer di solito rispondono entro 1 giorno
-
bug from-studio
Difficoltà 2/5 1-3 ore Idoneità per principianti 63/100
esengine/DeepSeek-Reasonix#12355 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
oblien/openship#1086 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno