lazy() moduleUrl with a leading slash never resolves: dev emits `//src/…`, the build manifest lookup misses
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 55/100
- Type d'issue
- Bug
- Clarté
- Plutôt claire
- Activité
- Active
- Stack technique
- typescript, vite
- Domaine
- build-system, tooling
Piste de recherche
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.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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
- Langage dominant
- TypeScript
- Étoiles
- 522
- Forks
- 72
- Merge moyen
- 1 j 8 h
- PR mergées (30 j)
- 29
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de solidjs/solid-vite-plugin
-
Test environment detection doesn't consider Vitest workspacesPeut-être pris @carloitaben l’a pris il y a 47 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
solidjs/solid-vite-plugin#205 · 1 commentaire · 2 réactions ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 3/5 1-2 jours Accessibilité débutants 55/100
solidjs/solid-vite-plugin#396 ·
Les mainteneurs répondent en général sous 1 jour
-
Start mode: generated entries render without the CSP nonce, and there is no per-request seam to supply onePeut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouverte
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 35/100
solidjs/solid-vite-plugin#388 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 3/5 1-2 jours Accessibilité débutants 68/100
solidjs/solid-vite-plugin#387 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 4/5 3-5 jours Accessibilité débutants 48/100
solidjs/solid-vite-plugin#381 ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de solidjs/solid-vite-plugin
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 1/5 1-3 heures Accessibilité débutants 84/100
answerLoops/answerLoops#345 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 82/100
siyuan-note/siyuan#20313 ·
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
LanternOps/breeze#8254 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 1/5 1-3 heures Accessibilité débutants 82/100
gofish-graphics/gofish-graphics#1084 ·
Les mainteneurs répondent en général sous 1 jour