Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

web-bundle: a root-relative import from a remote plugin fails in the browser

Chiusa Adatta ai principianti
#94 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

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

bug

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

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di MatAtBread/matbot

Tutte le issue di MatAtBread/matbot

Issue simili

Altre issue su TypeScript

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.