@ equinor/ 聚变框架
Bootstrap并配置核心Fusion框架模块图——认证,HTTP,服务发现,上下文,遥测等——在一个单一初始化调用中.
这是什么包裹?
@equinor/fusion-framework 是启动“融合框架”实例的顶级切入点。 它将内置模块集(MSAL auth,HTTP客户端工厂,服务发现,服务,上下文,事件总线,和遥测)捆绑在单个模块后 FrameworkConfigurator 编号 : init API使得消费者不必将每个模块单独接通.
当 您正在构建一个门户 shell, 一个独立的应用程序主机, 或任何需要 Fusion 模块堆栈的运行时间 。 运行的微前端应用程序 内部 一个已初始化的门户网站通常使用 @equinor/fusion-framework-react-app 换句话说.
快开始
import { FrameworkConfigurator, init } from '@equinor/fusion-framework';
// 1. Create a configurator
const configurator = new FrameworkConfigurator();
// 2. Set up authentication (MSAL)
configurator.configureMsal({
clientId: '<your-client-id>',
authority: 'https://login.microsoftonline.com/<your-tenant-id>',
});
// 3. Point service discovery at your registry
configurator.configureServiceDiscovery({
client: { baseUri: 'https://service-registry.example.com' },
});
// 4. Bootstrap — resolves all modules and assigns window.Fusion
const fusion = await init(configurator);
console.log(fusion.modules); // fully initialized module instances
关键概念
| 概念 | 说明 |
|---|---|
| 框架配置器 | 初始化前收集每个模块的配置 。 提供键入的帮助, 如 configureMsal, (中文(简体) ), configureHttp, (中文(简体) ), configureHttpClient,以及 configureServiceDiscovery。 。 。 . |
| 输入 | 需要一个 FrameworkConfigurator,初始化所有模块,集 window.Fusion,并发送 onFrameworkLoaded 活动. |
| 组合摩多 | 类型别名描述每个内置模块描述符(文字,事件,HTTP,MSAL,服务,服务-发现,遥测)外加任何额外的自定义模块. |
| 组合 | 根运行时对象返回 init包含 modules 与所有活模块实例相映射. |
API 表面
| 导出 | 仁爱 | 目的 |
|---|---|---|
FrameworkConfigurator | 类 | 初始化前配置模块 |
FusionConfigurator | 别名 | 折旧 ——使用 FrameworkConfigurator |
init 编号 : default | 函数 | 从配置器启动框架 |
FusionModules | 类型 | 内建 + 自定义模块描述联盟 |
FusionModulesInstance | 类型 | 初始化后已解析实例映射 |
Fusion | 接口 | 已曝光的根对象 window.Fusion |
FusionRenderFn | 类型 | 将应用程序安装到 DOM 元素的召回签名 |
共同模式
配置一个名为 HTTP 的客户端
configurator.configureHttpClient('my-api', {
baseUri: 'https://api.example.com',
defaultHeaders: { 'X-Custom': 'value' },
});
可选认证
// Pass `false` as second argument to make auth optional
configurator.configureMsal(msalConfig, false);
用自定义模块扩展
import { FrameworkConfigurator, init } from '@equinor/fusion-framework';
import myCustomModule from './my-custom-module';
const configurator = new FrameworkConfigurator<[typeof myCustomModule]>();
configurator.addConfig({ module: myCustomModule, configure: (b) => { /* … */ } });
const fusion = await init(configurator);
诊断 HTTP 传输失败
FrameworkConfigurator 使用
createHttpTelemetry 从 @equinor/fusion-framework-module-telemetry/integrations。 。 。 .
每次实际抓取尝试都会产生一个 fusion.http.request.duration 参数为
success, (中文(简体) ), failure (拒绝取回或非-2xx回复)或 cancelled (吸收信号)
结果,失败的尝试会增加一个消毒 fusion.http.request.failure. URLs, (中文(简体) ),
信头、尸体、信使和原出的错误从未被记录.
中间软件在每次配置回调后被附加, 所以重试中间软件
登记簿将它包起来,每次重试都是自己的尝试。 时间到 fetch 决定,
当一个流出的身体完成。 托肯收购由认证人单独报告
模块,并用自己的记录发现服务。 遥测在之后连接
初始化,所以模块初始化时提出的要求不记录. 输出者
以 markTelemetryExportRequest 并配置客户端
拥有自己的 middlewareHandler 未设置工具。 不创建出口国 .
// Opt out of framework HTTP diagnostics; other operational telemetry is unchanged.
const configurator = new FrameworkConfigurator({ httpTelemetry: false });
App 模块配置了自己的 HTTP 模块, 而此设置不是仪器 .
内建模块
默认启用了下列模块的框架船:
@equinor/fusion-framework-module-event——跨模块活动总线@equinor/fusion-framework-module-msal- MSAL/Azure AD认证@equinor/fusion-framework-module-http——HTTP客户工厂和被命名客户@equinor/fusion-framework-module-service-discovery——运行时间服务终点解析@equinor/fusion-framework-module-services——打字服务客户端@equinor/fusion-framework-module-context- 应用程序/项目背景选择@equinor/fusion-framework-module-telemetry• 遥测、记录和元数据
测试
从 @equinor/fusion-framework/mock 在没有证书、没有网络接入和没有配置的测试中初始化框架.
import { createMockToken, mockFramework } from '@equinor/fusion-framework/mock';
const fusion = await mockFramework((configurator) => {
configurator.msal.setAcquireToken(({ clientId, scopes }) =>
createMockToken({
aud: clientId,
scp: scopes.join(' '),
name: 'Ada Lovelace',
preferred_username: '[email protected]',
oid: 'ada-lovelace',
}),
);
configurator.serviceDiscovery.setBaseUri('http://localhost:6669');
});
const token = await fusion.modules.auth.acquireAccessToken();
const apps = await fusion.modules.serviceDiscovery.resolveService('apps');
这个 真实 配置 + 初始化管道运行 真实 内置模块;只有离开进程的边框——MSAL客户端和服务发现客户端被替换. 因此,模块接线、配置验证和生命周期钩在生产中表现得和它们一样,因此测试仍然捕获接线错误.
切入点有 没有测试运行者的依赖性而且船上没有嘲弄API本身——监视个别电话是你们试跑者的工作.
文档
| 指南 | 封面 |
|---|---|
| 选择测试层 | 用于 React app、 框架、 模块、 HTTP 和跑道级测试的导入 |
| 测试 | 选择用户、签名测试、编制服务注册、监视和配置为应用程序 |
| 测试-设计 | 何以取而代之,何以取而代之,何而取而取之;何而取而取而取而取而取而取之;何而取而取而取而取而取而取而取而取而取而取而取之;何而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取之而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取 |
| 测试-为另一个模块添加一个模拟器 | 向自己的模块提供测试双倍,哪些框架模块尚未覆盖 |
| 测试 - API | 每个模拟导出和拥有的软件包 |
进一步阅读
📚 完整文档