Retry Plugin
Retry Plugin
El Retry Plugin proporciona un mecanismo de reintento robusto para Module Federation. Cuando los módulos remotos o los recursos no se cargan, reintenta automáticamente para mantener estable tu aplicación.
Características
- Reintentos automáticos: mejora la estabilidad reintentando las cargas de recursos fallidas
- Rotación de dominios: alterna automáticamente entre varios dominios de respaldo
- Cache-busting: añade parámetros de query para evitar interferencias de la caché en los reintentos
- Configuración flexible: personaliza el número de reintentos, el retardo y los callbacks
Instalación
Guía de migración
De v0.18.x a v0.19.x
La configuración del plugin se ha simplificado. Los antiguos objetos de configuración fetch y script están obsoletos:
Uso
Método 1: usarlo en el plugin de build
Método 2: usarlo solo en runtime
Configuración
Básica
retryTimes
- Tipo:
number - Opcional
- Número de reintentos; por defecto es 3
retryDelay
- Tipo:
number - Opcional
- Retardo entre reintentos en milisegundos; por defecto es 1000
Avanzada
domains
- Tipo:
string[] - Opcional
- Dominios de respaldo para la rotación. Por defecto es un array vacío
addQuery
- Tipo:
boolean | ((context: { times: number; originalQuery: string }) => string) - Opcional
- Indica si se debe añadir un parámetro de query al reintentar
- Por defecto se aplica cache-busting a los reintentos de remote entries de tipo
esmymodule, porque los navegadores almacenan en caché por URL los imports dinámicos fallidos. Las demás rutas de reintento no añaden ningún parámetro de query por defecto - Establece
addQuery: falsepara desactivar el cache-busting por defecto de las remote entries ESM/module - Si se proporciona una función, recibe el número de reintento y la query string original, y debe devolver la nueva query string
fetchOptions
- Tipo:
RequestInit - Opcional
- Opciones de fetch personalizadas; por defecto es un objeto vacío
manifestDomains
- Tipo:
string[] - Opcional
- Lista de rotación de dominios que se usa al obtener el manifest (p. ej.,
mf-manifest.json). Tiene prioridad sobredomainsen los reintentos de obtención del manifest. Los demás recursos siguen usandodomains.
Callbacks
onRetry
- Tipo:
({ times, domains, url, tagName }: { times?: number; domains?: string[]; url?: string; tagName?: string }) => void - Opcional
- Se dispara en cada reintento
- Parámetros:
timesnúmero de reintento actual,domainslista de dominios,urlURL de la solicitud,tagNametipo de recurso
onSuccess
- Tipo:
({ domains, url, tagName }: { domains?: string[]; url?: string; tagName?: string; }) => void - Opcional
- Se dispara cuando un reintento acaba teniendo éxito
- Parámetros:
domainslista de dominios,urlURL de la solicitud,tagNametipo de recurso
onError
- Tipo:
({ domains, url, tagName }: { domains?: string[]; url?: string; tagName?: string; }) => void - Opcional
- Se dispara cuando fallan todos los reintentos
- Parámetros:
domainslista de dominios,urlURL de la solicitud,tagNametipo de recurso
Detalles
Lógica de reintento
El plugin reintenta automáticamente cuando falla la carga de un recurso. El número de reintentos se controla con retryTimes. Por ejemplo:
retryTimes: 3significa hasta 3 reintentos (después del primer intento)- Se aplica un retardo de
retryDelayms antes de cada reintento
Rotación de dominios
Cuando se configura domains, el plugin rota el host en cada reintento:
Orden de los intentos:
- Intento inicial: URL original
- 1.er reintento: cambia a
cdn2.example.com - 2.º reintento: cambia a
cdn3.example.com - 3.er reintento: cambia a
cdn1.example.com
Cache-busting
Usa addQuery para añadir parámetros de query durante los reintentos y evitar interferencias de la caché:
Para las remote entries de tipo esm o module, el plugin añade retryCount por defecto para que cada reintento de import dinámico use una URL nueva. Este comportamiento por defecto no afecta a los reintentos del manifest, de fetch ni de scripts clásicos. Desactívalo explícitamente si lo necesitas:
Para habilitar el cache-busting en todas las rutas de reintento:
También puedes proporcionar una función:
Callbacks
Puedes monitorizar el ciclo de vida de los reintentos con callbacks:
Parámetros de los callbacks:
times: número de reintento actual (empieza en 1)domains: la lista de dominios actualurl: URL de la solicitud actualtagName: tipo de recurso ('fetch' o 'script')
Casos de uso
1. Conmutación por error de CDN
2. Redes inestables
3. Monitorización y registro
Notas
- Rendimiento: un número elevado de reintentos aumenta el tiempo de carga; ajústalo a tu entorno
- Dominios: asegúrate de que todos los dominios de
domainssirvan el mismo recurso - Caché: si
addQueryestá habilitado, ten en cuenta la estrategia de caché de la CDN - Gestión de errores: cuando fallan todos los reintentos, se lanza el error original; gestiónalo en las capas superiores
Códigos de error
RUNTIME_008: fallo de carga de un recurso que activa el mecanismo de reintento