The router for easy microfrontends that enables multiple frameworks to coexist on the same page.
npx @tessl/cli install tessl/npm-single-spa@6.0.0Single-SPA is a JavaScript framework for building microfrontends that enables multiple frameworks (React, Angular, Vue, etc.) to coexist on the same page without page refreshes. It provides application lifecycle management, routing, and orchestration for microfrontend architectures.
npm install single-spaimport {
registerApplication,
start,
navigateToUrl,
getMountedApps
} from "single-spa";For CommonJS:
const {
registerApplication,
start,
navigateToUrl,
getMountedApps
} = require("single-spa");import { registerApplication, start } from "single-spa";
// Register a microfrontend application
registerApplication({
name: "navbar",
app: () => import("./navbar/navbar.app.js"),
activeWhen: "/",
customProps: { theme: "dark" }
});
// Register another application
registerApplication({
name: "products",
app: () => import("./products/products.app.js"),
activeWhen: "/products"
});
// Start single-spa
start();Single-SPA is built around several key concepts:
Core functionality for registering, unregistering, and managing microfrontend applications throughout their lifecycle.
function registerApplication(config: RegisterApplicationConfig): void;
function registerApplication(
appName: string,
applicationOrLoadingFn: Application,
activityFn: ActivityFn,
customProps?: CustomProps | CustomPropsFn
): void;
function unregisterApplication(appName: string): Promise<any>;Navigation utilities and routing integration for managing URL changes and programmatic navigation between microfrontends.
function navigateToUrl(obj: string | Event | HTMLAnchorElement, opts?: Object): void;
function triggerAppChange(): Promise<any>;Status constants and utilities for monitoring application states and lifecycle management.
function getAppStatus(appName: string): string | null;
function getMountedApps(): string[];
// Status constants
const NOT_LOADED = "NOT_LOADED";
const MOUNTED = "MOUNTED";
// ... other status constantsApplication Status & Lifecycle
Manual component management system for mounting components outside of the standard application lifecycle.
function mountRootParcel(
parcelConfig: ParcelConfig,
parcelProps: ParcelProps & CustomProps
): Parcel;Global error handling system for managing application errors and failures.
function addErrorHandler(handler: (error: AppError) => void): void;
function removeErrorHandler(handler: (error: AppError) => void): void;Configuration utilities for setting application lifecycle timeouts and framework-specific options.
function start(opts?: StartOpts): void;
function setMountMaxTime(time: number, dieOnTimeout?: boolean, warningMillis?: number): void;interface RegisterApplicationConfig {
name: string;
app: Application;
activeWhen: Activity;
customProps?: CustomProps | CustomPropsFn;
}
interface LifeCycles {
bootstrap: LifeCycleFn | Array<LifeCycleFn>;
mount: LifeCycleFn | Array<LifeCycleFn>;
unmount: LifeCycleFn | Array<LifeCycleFn>;
update?: LifeCycleFn | Array<LifeCycleFn>;
}
interface AppProps {
name: string;
singleSpa: any;
mountParcel: (parcelConfig: ParcelConfig, customProps: ParcelProps & CustomProps) => Parcel;
}
type Application = LifeCycles | ((config: AppProps) => Promise<LifeCycles>);
type ActivityFn = (location: Location) => boolean;
type Activity = ActivityFn | string | Array<ActivityFn | string>;
type LifeCycleFn = (config: AppProps) => Promise<any>;
interface StartOpts {
urlRerouteOnly?: boolean;
}