web-bundle: a root-relative import from a remote plugin fails in the browser
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 70/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- javascript
- Ambito
- frontend
Direzione di ricerca
Inizia da apps/web-bundle/src/loader.js, dove loadRemoteModule salta qualsiasi specifier che non sia ./ o ../ (il controllo isRelative). Confronta con l'hook Node in apps/cli/remote-loader.js, che risolve gli specifier relativi alla root rispetto all'origin del plugin. Il lavoro è completo quando un import relativo alla root, come /lib/x.js, in un plugin caricato nel browser viene risolto rispetto all'URL sorgente del modulo e caricato tramite loadRemoteModule, mentre gli specifier assoluti https: restano invariati e entrambi gli host concordano.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
What happens
A remote plugin loaded in the browser whose own source imports a root-relative specifier (import x from '/lib/x.js') fails to load. The same plugin loads on Node.
Why
loadRemoteModule in apps/web-bundle/src/loader.js rewrites only ./ and ../ specifiers to their children's blob URLs; anything else is left for the browser (if (!isRelative(spec)) return null). The module itself runs from a blob: URL, and a blob: base cannot resolve any relative reference:
new URL('/x.js', 'blob:http://localhost:8080/0b6e-uuid') // throws ERR_INVALID_URL
Node's hook (apps/cli/remote-loader.js) resolves a root-relative specifier against the plugin's origin, so the two hosts disagree.
Notes toward a fix
Treat a specifier starting with / (but not //) like a relative one: new URL(spec, url) against the module's source URL, then load it through loadRemoteModule. An absolute https: specifier must stay untouched, as now; that is what gives a CDN module its real URL as identity.
Found while reviewing #93.
- Lingua principale
- TypeScript
- Stelle
- 5
- Fork
- 2
- Merge medio
- 1g 2h
- PR unite (30g)
- 12
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
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 MatAtBread/matbot
-
http: ToolContracts arm duplicates HttpInput inline — named references now expand on the wireApertafuture-enhancement
Difficoltà 3/5 Mezza giornata Idoneità per principianti 66/100
MatAtBread/matbot#100 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
future-enhancement
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
MatAtBread/matbot#65 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di MatAtBread/matbot
Issue simili
-
documentation
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
components-web-app/docs#260 ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 65/100
521xueweihan/HelloGitHub#4025 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
ctrf-io/playwright-ctrf-json-reporter#117 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
voidzero-dev/void#478 ·
I maintainer di solito rispondono entro 1 giorno