API & Optionen
loadRemoteModules(ctx, options)
Lädt das Manifest, importiert Bundles und registriert Styles, Routen, Locales und install()‑Hooks.
ts
import { loadRemoteModules } from '@stratton-cologne/remote-modules'
await loadRemoteModules({ app, router, i18n, pinia }, {
manifestUrl: '/modules/index.json',
fetch: customFetch,
i18nNamespaceStrategy: 'moduleName', // oder (name, bundle) => string
guardDuplicateRoutes: 'name', // 'name' | 'path' | false
preferDevEntries: !import.meta.env.PROD,
allowDevEntryInProd: false,
resolveSpecifier: (s) => s, // für CDN/Import-Map
mapManifest: (refs) => refs, // Einträge filtern/umschreiben
onModuleLoaded: (bundle, ref) => {},
onModuleError: (ref, err) => {},
log: (level, ...args) => console[level === 'error' ? 'error' : 'log'](...args)
})loadSingleModule(ctx, ref, options)
Ad‑hoc ein einzelnes Modul laden (ohne eigenes Manifest).
ts
import { loadSingleModule } from '@stratton-cologne/remote-modules'
await loadSingleModule({ app, router, i18n, pinia }, {
name: 'admin', version: '1.2.3', baseUrl: '/modules/admin/1.2.3/', entry: 'index.js'
})ModuleBundle (Default‑Export des Moduls)
ts
type ModuleBundle = {
name: string
version: string
routes?: RouteRecordRaw[]
locales?: Record<string, any>
install?: (ctx: { app, router, i18n, pinia }) => void
onUnload?: () => void
i18nNamespace?: string | null // undefined → Strategie; null/'' → ROOT
}Hinweis zu i18n: Enthalten die Locales bereits { [ns]: {...} }, wird doppelte Verschachtelung automatisch vermieden.