Squide(@squide/firefly)是 Workleap 提供的 React 模块化应用外壳,用于把宿主应用与多个功能模块组合成一个整体。
用途:搭建模块化 React 应用,让各模块自行注册路由、导航项与 MSW 请求处理器,由宿主在启动时统一装配。
主要能力:FireflyRuntime 是运行时核心,应通过 initializeFirefly() 创建(不要直接实例化),它会接入插件、日志与模块生命周期。路由默认受保护,注册于 ProtectedRoutes 之下;公开路由用 registerPublicRoute() 注册。依赖远程数据或功能开关的导航项可用两阶段延迟注册:注册函数返回一个函数,在第二阶段执行 registerNavigationItem()。全局数据获取分为受保护(useProtectedDataQueries,配合 AppRouter 的 waitForProtectedData)与公开(usePublicDataQueries,配合 waitForPublicData)。导航渲染使用 useNavigationItems 与 useRenderedNavigationItems,渲染函数签名为 (item, key, index, level) 与 (elements, key, index, level),不接受自定义上下文参数,需用闭包或 hooks 获取外部值;additionalProps 应整体展开,供渲染器读取而非透传的值放入 $context(18.2.0-19.0.0 中名为 $meta)。
使用方式:宿主用 FireflyProvider 包裹 AppRouter 与 React Query 的 QueryClientProvider;模块通过 ModuleRegisterFunction 注册路由与导航;延迟注册需用 useMemo 稳定数据引用后调用 useDeferredRegistrations()。每次延迟注册运行都必须重新注册完整的导航项集合,Squide 会丢弃上一轮注册的内容;插件或外部注册表需通过 Plugin.onDeferredRegistrationScopeStarted 或 runtime.registerDeferredRegistrationScopeStartedListener 清理自身状态。
适用场景:需要多团队协作、按模块划分路由与导航的大型 React 前端,以及需要功能开关、i18next、Storybook、LaunchDarkly、Honeycomb 等集成的项目。
限制与注意:仅使用文档中记录的 API;渲染函数签名固定;动态路由段用 resolveRouteSegments 配合闭包;激活态样式用 React Router NavLink 的 isActive 参数;延迟回调的第一个参数是 deferredRuntime,与外部 runtime 不同;懒加载 i18next 实例只能在模块 register() 中注册。详细 API、组件、模式与集成见 references 下各文件。其余细节暂未提供。