Loader
mfeLoader (deprecato)
Istanza singleton legacy del MFELoader. Deprecato — preferire new MFELoader() per controllo del ciclo di vita.
Stato
Deprecato dalla v1.x. Sarà rimosso nella prossima major version. Creare un'istanza locale con
new MFELoader() per un migliore controllo del ciclo di vita e isolamento della cache./**
* @deprecated Usare `new MFELoader()` invece.
*/
export const mfeLoader = new MFELoader()
Problema del singleton
Il singleton globale condiviso può causare conflitti di cache tra bundle indipendenti:
┌────────────────────────────────┐
│ Bundle A (host principale) │
│ ├─ import { mfeLoader } │
│ └─ mfeLoader.loadRemote(...) │ ──┐
└────────────────────────────────┘ │ stesso `name`
│ in entrambi i bundle
┌────────────────────────────────┐ │ ↓
│ Bundle B (admin panel) │ │ cache pollution
│ ├─ import { mfeLoader } │ │
│ └─ mfeLoader.loadRemote(...) │ ──┘
└────────────────────────────────┘
Se i due bundle hanno copie diverse di @pzeta/mfe-contracts (versioni differenti, no dedup), avrai due istanze di mfeLoader con cache separate ma collisioni di nomi → bug subdoli.
Migrazione
Prima (deprecato)
import { mfeLoader } from '@pzeta/mfe-contracts'
const mfe = await mfeLoader.loadRemote(config)
Dopo (consigliato)
import { MFELoader } from '@pzeta/mfe-contracts/loader'
const loader = new MFELoader()
const mfe = await loader.loadRemote(config)
Dipendency injection
// shell/main.ts
import { MFELoader } from '@pzeta/mfe-contracts/loader'
const loader = new MFELoader()
app.provide('mfeLoader', loader)
// in qualsiasi componente che debba caricare un MFE
import { inject } from 'vue'
import type { MFELoader } from '@pzeta/mfe-contracts/loader'
const loader = inject<MFELoader>('mfeLoader')!
API identica
A parte la modalità di istanziazione, l'API è esattamente la stessa di MFELoader:
await mfeLoader.loadRemote(config)
mfeLoader.clearCache(name)
mfeLoader.clearAllCache()
mfeLoader.isLoaded(name)
mfeLoader.isLoading(name)
Quando NON migrare
Casi rari in cui il singleton ha senso e potresti volerlo conservare temporaneamente:
- prototipi rapidi
- script one-shot dove la shell è monolitica e c'è un solo bundle
- migration window di breve durata
In tutti gli altri casi, migra a new MFELoader(): l'API è identica, il refactor è minimo, eviti bug futuri.
Tipi correlati
MFELoader— classe da istanziare manualmente