Variables globales
En Module Federation, las principales variables globales son __FEDERATION__, SHARE y INSTANCES. Registran la información de Module Federation, la información de los módulos compartidos y la información de las instancias de la aplicación actual, y nos ayudan a entender y depurar el comportamiento en runtime de Module Federation.
Las variables globales son de solo lectura: no las modifiques.
FEDERATION
Después de la inicialización, la variable __FEDERATION__ se inyecta de forma global. Esta variable es un objeto que contiene toda la información de Module Federation de la aplicación actual.
moduleInfo
Se recomienda usar Chrome DevTools para ver el moduleInfo procesado.
Registra toda la información de los módulos de la aplicación actual. A partir de esta información, puedes obtener las dependencias de un módulo.
La estructura de moduleInfo es un objeto cuya clave consta de dos partes: {moduleName}(:{moduleVersion}).
-
moduleNamees el nombre del módulo ymoduleVersiones la versión del módulo o suurl. -
moduleVersionsolo existe en los módulos producer.
El siguiente ejemplo muestra cómo usar moduleInfo para obtener las dependencias, suponiendo el siguiente moduleInfo:
moduleInfo
En el ejemplo anterior, moduleInfo contiene información de 5 módulos; entre ellos, manifest_host no lleva un número de versión a continuación, lo que indica que es un módulo consumer.
El campo remotesInfo de manifest_host registra la información de todos los módulos producer de los que depende, y el campo matchedVersion correspondiente registra la versión o la url con la que coincide.
Puedes obtener la información del módulo producer correspondiente mediante la clave + matchedVersion del campo remotesInfo del consumer, por ejemplo, webpack_provider:http://localhost:3009/mf-manifest.json.
version
Solo existe en los producers; en los consumers su valor es una cadena vacía
La versión o la url del módulo actual.
buildVersion
La versión de build del módulo actual, que normalmente se toma del campo version de package.json.
globalName
Solo existe en el producer
El nombre de la variable global del módulo producer actual. Puedes obtener el contenedor del producer mediante globalThis[globalName]; normalmente se toma del campo name de package.json.
publicPath
El publicPath del módulo actual.
getPublicPath
Este campo y
publicPathson mutuamente excluyentes
El getPublicPath del módulo actual; el publicPath final se obtiene llamando a new Function(getPublicPath)().
ssrPublicPath
El publicPath de los archivos de servidor del módulo actual.
remoteEntry
Solo existe en el producer
El nombre del archivo de entrada del módulo producer actual.
remoteEntryType
Solo existe en el producer
El tipo de archivo de entrada del módulo producer actual.
remoteTypesZip
Solo existe en el producer
El nombre del paquete comprimido con los archivos de declaración de tipos del módulo producer actual.
remoteTypesAPI
Solo existe en el producer
El nombre del archivo de declaración de la API de tipos del módulo producer actual.
shared
Toda la información de los módulos compartidos de los que depende el módulo actual. La definición de tipos es la siguiente:
modules
Solo existe en el producer
Toda la información de los módulos que exporta el módulo actual. La definición de tipos es la siguiente:
SHARE
Toda la información de los módulos compartidos registrados (cargados) actualmente. La definición de tipos es la siguiente:
Type declaration
Puedes usar __SHARE__ para consultar el estado de carga de un shared concreto. Por ejemplo, si existe el siguiente __SHARE__:
__SHARE__
En los datos anteriores puedes ver la información de los módulos compartidos de los dos módulos manifest_host y app1. Por ejemplo, para inspeccionar cómo se cargó el módulo react, sigue estos pasos:
reactsolo tiene una versión,18.3.1.- Revisa
__SHARE__["app1:0.1.94"].default.react["18.3.1"]:loadedestrue, lo que indica que el módulo se ha cargado. - El campo
fromeswebpack_provider, lo que significa que el móduloreactlo proporcionó ese módulo. - Por último, fíjate en el campo
useIn: contienewebpack_provideryapp1, lo que significa que ambos módulos consumen esta versión dereact.
INSTANCES
La instancia de MF cargada actualmente. Almacena una lista de todos los módulos de MF cargados. Cada entrada de la lista tiene la siguiente estructura:
bridgeHook
Contiene metadatos sobre el bridge de MF, que se usa para que los casos de uso entre aplicaciones (React, Vue) se carguen correctamente.
hooks
Contiene metadatos sobre los hooks de MF, que se usan para engancharse al ciclo de vida de MF.
loaderHook
Contiene metadatos sobre el loaderHook de MF.
moduleCache
Contiene un Map que almacena todos los módulos de MF con sus metadatos disponibles en el moduleCache.
name
El nombre del módulo de MF.
options
Útil para depurar tus módulos.
Datos esenciales sobre el módulo de MF, como los plugins cargados, los remotes conectados, la shareStrategy y el objeto de dependencias compartidas.
remoteHandler
Contiene metadatos sobre el remoteHandler de MF, incluido el idToRemoteMap, que almacena todos los enlaces con los componentes remotos expuestos por los remotes de MF conectados.
shareScopeMap
Contiene metadatos sobre el shared scope de MF, incluidos los datos de cada dependencia compartida conectada.
sharedHandler
Contiene metadatos sobre el sharedHandler de MF.
snapshotHandler
Útil para comprobar la estructura y el estado de mf-manifest.json.
Contiene metadatos sobre el snapshotHandler de MF, incluidos el objeto manifestCache y el objeto manifestLoading.
version
La versión del módulo de MF.
PRELOADED_MAP
El mapa clave-valor de todos los módulos precargados (en tiempo de build). key representa el nombre del módulo y value, el valor booleano de su estado de carga.
MANIFEST_LOADING
Contiene metadatos sobre el objeto manifestLoading. Es lo mismo que snapshotHandler.manifestLoading en __INSTANCES__.