CtrlK
BlogDocsLog inGet started
Tessl Logo

vivabox-group-skills/module-federation-load-component

Componente de carga para Module Federation

100

Quality

100%

Does it follow best practices?

Impact

Average score across 4 eval scenarios

SecuritybySnyk

Advisory

Suggest reviewing before use

Overview
Quality
Evals
Security
Files
name:
module-federation-load-component
description:
Bootstraps and uses the canonical LoadComponent host service for Module Federation (src/core/api/services/module-federation/moduleFederationService.tsx). Use whenever the user mentions Module Federation, remoteEntry, LoadComponent, createRemoteComponent, remotes API, bridge components, host shell, dynamic or static remotes, or scaffolding a new host — even if the service file does not exist yet.

Module Federation — LoadComponent (host)

Canonical host service path (any host app in the monorepo):

src/core/api/services/module-federation/moduleFederationService.tsx

Reference implementation in this repo: ProjectBaseREACT/self-service-f/src/api/services/module-federation/ (legacy path; prefer src/core/... for new hosts).

Remote MFE example: ProjectBaseREACT/self-service-mf.

Stack: @module-federation/enhanced/runtime, @module-federation/bridge-react.

Bootstrap host service (only if missing)

Before any page uses LoadComponent, ensure the service file exists.

  1. Check: src/core/api/services/module-federation/moduleFederationService.tsx
  2. If the file already exists → do nothing. Do not edit, refactor, or “improve” it; treat it as frozen infrastructure.
  3. If missing → create it by copying verbatim from assets/moduleFederationService.tsx (byte-for-byte; no logic changes).

Required dependencies (host package.json — add only if absent):

"@module-federation/bridge-react": "<match project>",
"@module-federation/enhanced": "<match project>"

Import in pages:

import { LoadComponent } from '@/core/api/services/module-federation/moduleFederationService';
// or relative: '../../../core/api/services/module-federation/moduleFederationService'

Adjust alias (@/core) to the host’s tsconfig paths.

Core API (host)

ExportRole
MFEConfig{ mfe, url, component, name?, type? }mfe = remote name in MF config; component = expose key without ./
LoadComponentIdempotent registerRemotes, lazy bridge load, Suspense wrapper
createRemoteComponentLower-level; prefer LoadComponent in UI

Usage:

<LoadComponent
  lazyElement={{
    mfe: remote.name,
    url: remote.url,
    component: remote.component,
    type: remote.type,
  }}
  loading={<div>Loading …</div>}
  fallback={({ error }) => <div>Error: {error.message}</div>}
  router={{ navigate }}
  {...hostSpecificProps}
/>

Props after lazyElement forward to the remote root.

Static vs dynamic loading

ModeWhenlazyElement source
StaticFixed blocks (profile, header widgets)Hardcoded object in component
DynamicLists or routes from backendremotesService.getRemotes() / getMainRemotes()

Static — e.g. host App.tsx profileConfig + one LoadComponent.

Dynamic — map API Remote[] to LoadComponent (stack on one page or one per <Route>).

Legacy examples: self-service-f/src/App.tsx, SelfService.tsx, mock-backend/app/api/remotes/.

Remote MFE (expose)

  1. Page component (React UI).
  2. Feature.remote.tsxcreateBridgeComponent({ rootComponent }) — see reference.md.
  3. module-federation.config.tsexposes: { './Feature': '.../Feature.remote.tsx' }.

Host lazyElement.mfe === remote config name. Host lazyElement.component === expose key without ./.

Checklist — new federated screen

Remote:

  • UI + *.remote.tsx bridge
  • ./Feature in exposes
  • remoteEntry.js served at host url

Host:

  • moduleFederationService.tsx exists under src/core/... (bootstrap if not)
  • API row or static lazyElement
  • LoadComponent + loading / fallback
  • router={{ navigate }} when remote navigates

Do not

  • Modify moduleFederationService.tsx after install (canonical copy in skill assets/)
  • Register remotes manually in pages (LoadComponent handles it)
  • Use ./Component in lazyElement.component
  • Duplicate the service under another path if src/core/... already has it

Resources

FileContent
assets/moduleFederationService.tsxCanonical static source — copy only when missing
examples.mdStatic/dynamic host usage
reference.mdRemote *.remote.tsx + exposes
Workspace
vivabox-group-skills
Visibility
Public
Created
Last updated
Publish Source
CLI
Badge
vivabox-group-skills/module-federation-load-component badge