Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

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

Cerrado Apto para principiantes
#94 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
70/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
javascript
Área
frontend

Línea de trabajo

Empieza en apps/web-bundle/src/loader.js, donde loadRemoteModule omite cualquier specifier que no sea ./ o ../ (la comprobación isRelative). Compáralo con el hook de Node en apps/cli/remote-loader.js, que resuelve los specifiers relativos a la raíz contra el origin del plugin. Está terminado cuando un import relativo a la raíz, como /lib/x.js, en un plugin cargado en el navegador se resuelve contra la URL de origen del módulo y se carga mediante loadRemoteModule, mientras que los specifiers absolutos https: permanecen sin cambios y ambos hosts coinciden.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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.

Lenguaje dominante
TypeScript
Estrellas
5
Forks
2
Merge medio
1 d 2 h
PR fusionados (30 d)
12

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de MatAtBread/matbot

Todos los issues de MatAtBread/matbot

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.