Skip to content

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.