Erro handling for renderização do módulo remoto em Module Federation.
Background
Remote módulo processo de carregamento may fail due para network recurso carregamento falha ou business logic renderização falha.
Though Module Federation Runtime fornece detailed informações detalhadas de log de erro e runtime hook para help users locate o cause de carregamento falha, precisamos add erro fallback mechanism para garantir o stability do entire site, preventing o entire site de crashing due para o falha de uma renderização do módulo remoto.
Solution
To build uma robust carregamento de módulo remoto mechanism, nós pode handle possíveis problemas do seguintes three levels:
O seguinte solutions pode refer para o exemplos em router-demo.
Network layer: Retry mechanism
Use @module-federation/retry-plugin plugin para tratar problemas relacionados à rede:
-
Automatically retry falhou recurso requests
-
Configurable retry times e interval
-
Suporte custom tratamento de erros estratégia
Carregamento layer: Erro handling hook
Use Module Federation Runtime fornecido errorLoadRemote hook para mais granular tratamento de erros:
- Capture erros em diferente carregamento lifecycle
- Forneçum componente de fallback ou backup recurso
- Suporte custom tratamento de erros estratégia
Rendering layer: Erro boundary
Use React's ErrorBoundary mechanism para tratar componente renderização exceptions:
- Graceful degradation, display friendly erro prompts
- Isolate erro impact, prevent o entire aplicação de crashing
- Suporte erro recovery e retry carregamento
Esses three solutions são for diferente scenarios, pode ser usado separadamente, ou combined para forneça uma mais comprehensive tratamento de erros mechanism. Below nós vai introduce o specific implementation de each solution em detail.
Add mecanismo de retry
For weak network environment ou producer has não started o service, nós pode add mecanismo de retry para solicitar recursos multiple times, que vai increase o probability de recurso carregamento success.
Module Federation official fornece retry plugin @module-federation/retry-plugin para suporte mecanismo de retry for recursos, oferece retry para recursos fetch e script.
Registro em runtime puro
Para saber mais sobre a configuração de parâmetros de @module-federation/retry-plugin consulte document
Plugin registration
Effect as follows:


errorLoadRemote hook
Para erros no processo de carregamento de módulos remotos, eles podem ser captured no errorLoadRemote hook.
errorLoadRemote é o hook for tratamento de erros em Module Federation Runtime. Quando o carregamento de módulo remoto fails, este hook vai ser triggered. It é designed para trigger quando o módulo carregamento fails em diferente lifecycle stages, e allow users para customize tratamento de erros estratégias.
errorLoadRemote suporta returning um componente de fallback for erro fallback, e também suporta returning specific recurso content para garantir subsequent processes render normally.
We divide o uso de módulo registration e carregamento em "runtime puro + importação dinâmica" e "registro por plugin + importação síncrona".
Pure runtime + importação dinâmica
Ao usar registro em runtime puro, o módulo remoto vai não solicitar recursos until depois registration.
Use o errorLoadRemote hook para capture carregamento de módulo remoto erros (including recurso carregamento erros), e suporte returning errorBoundary componente de fallback.
Effect as follows:


Plugin registration + importação síncrona
Plugin registration suporta usando importação síncrona para carregar módulos, e o momento da solicitação de recursos é earlier than runtime puro, so precisamos registrar o errorLoadRemote hook no plugin.
O seguinte exemplo shows como para tratar erros em diferente lifecycle stages.
Se your aplicação scenario é simple, você pode refer para o simplified versão below, que fornece uma unified tratamento de erros solution.
-
App.tsximportação síncrona:import Remote1App from 'remote1/app'; -
About
fallback.ts:-
errorLoadRemotehook receives umargsparameter, que contains o detailed information do erro. Throughargs.lifecyclenós pode determine o stage do erro occurrence, e take o corresponding processing estratégia: -
Handle componente carregamento erros (
args.lifecycle === 'onLoad')- Este tipo de erro occurs no módulo processo de carregamento other than o entry recurso
mf-manifest.json - We pode retornar um componente de fallback com styles:
- Este tipo de erro occurs no módulo processo de carregamento other than o entry recurso
-
Handle arquivo de entrada carregamento erros (
args.lifecycle === 'afterResolve')- Este tipo de erro occurs no entry recurso
mf-manifest.jsonprocesso de carregamento - We pode handle it no seguintes two formas:
uma. Try para carregar backup service:
b. Use local backup recurso:
- Este tipo de erro occurs no entry recurso
-
Simplified versão
Se você não precisa distinguish entre erro tipos, você pode também use uma generic tratamento de erros solution:
-
Effect as follows:


Set ErrorBoundary for componente
React's ErrorBoundary é o último line de defense for handling componente-level erros, no dynamic carregamento scenario de módulos remotos (such as carregamento lazy), ele pode help us capture e process o renderização erros de módulos remotos e forneça graceful degradation.
Setting ErrorBoundary for componentes é suitable for importação dinâmica módulo remoto scenarios, such as carregamento lazy scenarios.
Moreover, depois setting ErrorBoundary for componentes, você pode avoid relying no errorLoadRemote hook for erro fallback, que é uma feature de React itself para forneça erro fallback for your componentes.
App.tsximportação dinâmica módulo remoto
Effect as follows:

