标题: "@equinor/suplic-framework-app" 说明:“Fusion框架应用基础包” 类别 : “ 应用 ” 标签 :
- 应用
- 核心项目
- 基础
- 模块
- 框架
- 类型标记
Fusion应用程序的配置和初始化层.
使用此软件包设置应用程序模块, 配置 HTTP 客户端, 集成
使用服务发现、启用书签和电线遥测设备——所有设备都有
单人 configureModules 电话.
大部分的聚合应用应该使用
@equinor/fusion-framework-react-app换句话说. 这个低级的软件包用于框架不可知或高级的情景.
文档
| 专题 | 说明 |
|---|---|
| 配置 HTTP 客户端 | 从 App 配置、服务发现和明确注册中命名客户端,加上分辨率优先级 |
| 启用书签 | 通过注册书签模块 enableBookmark |
| 测试 | 这个 /mock 切入点 : mockAppModules, (中文(简体) ), AppMockConfigurator,以及 enableAppManifestMock |
安装
pnpm add @equinor/fusion-framework-app
快速启动
import type { AppModuleInitiator } from '@equinor/fusion-framework-app';
import { enableState } from '@equinor/fusion-framework-app/enable-state';
const configure: AppModuleInitiator = (configurator) => {
enableState(configurator);
};
[叹息] 状态管理模块是一个强大的工具,但是在您的应用中使用它时必须了解潜在的陷阱和局限性. 国家管理是全球性的,如果不仔细使用,可能导致出乎意料的行为.
实例1: 如果有多个依赖于同一状态的组件,更新一个组件中的状态会导致所有使用该状态的组件的重接,可能导致性能问题.
实例2: 用户打开了应用程序的多分页,每个分页都在修改相同的状态. 这会导致出乎意料的行为,因为一个标签中所做的修改会被反映到所有标签中. (类似于存储选定列的用户首选项)
书签
书签模块提供了保存和恢复应用程序状态的方法. 这对于在用户从应用程序中导航后返回应用程序时保存应用程序状态很有用.
# Install the bookmark module
pnpm add @equinor/fusion-framework-module-bookmark
import { configureModules } from '@equinor/fusion-framework-app';
// Create an initializer with custom configuration
const initialize = configureModules((configurator, { fusion, env }) => {
// Register a named HTTP client
configurator.configureHttpClient('myApi', {
baseUri: 'https://api.example.com',
defaultScopes: ['api://client-id/.default'],
});
});
// Bootstrap the application
const modules = await initialize({ fusion, env });
关键概念
门户网站认证默认继承
configureModules 创建一个 AppConfigurator 登记册 auth 并行 event 财务报告和审定财务报表 http
在应用程序的配置调用运行前 。 它以 fusion.modules
作为母参考。 MSAL 然后通过兼容版本重新使用门户认证提供者
createProxyProvider 路径,共享已有的客户端和活账户而无需再登录.
React App 靴子使用同样的路径.
普通主机应用程序不需要 enableMSAL 以使用角色 V2 。 登记册 enableRoles 通常情况下;
真实角色客户端在每次账户范围操作前读取继承的账户, 所以父程序
账户的变更和签出反映在以后的请求中。 无法使用的账户生成
RequiredAccessRolesError,而不是新的登录流.
故意自定义认证, 使用 enableMSAL 与 builder.setProvider(customAuthProvider)。 。 。 .
明确供应的供应商仍然具有权威性,即使在签字后也是如此。 一个赤裸的
enableMSAL 这里的调用是冗余的,仅客户端设置不会覆盖一个母端提供者 .
此默认注册独立于遥测, 不适用于光
ModulesConfigurator 鞋带。 见
角色认证边界。 。 。 .
| 概念 | 说明 |
|---|---|
configureModules | 用于创建应用程序模块的同步初始化器的工厂函数. |
AppConfigurator | 内部配置器由 configureModules; 注册默认模块(event, (中文(简体) ), http, (中文(简体) ), msal)并读取端点配置. |
IAppConfigurator | 配置器的公用接口,在打入配置回调时使用. |
AppModuleInitiator | 接受回调签名 configureModules 用于用户提供的设置. |
AppEnv | 环境描述符,包含应用程序的显示、配置和可选的碱名. |
enableBookmark | 启用书签模块的辅助工具(从 @equinor/fusion-framework-app/enable-bookmark) (中文(简体) ). |
mockAppModules | 运行真正的模块管道,防止用于测试的确定性假冒(进口自 @equinor/fusion-framework-app/mock) (中文(简体) ). |
API 表面
configureModules(cb?)
返回同步初始化器 (args: { fusion, env }) => Promise<AppModulesInstance>。 。 。 .
可选回调收到 IAppConfigurator 和合力/电弧,
允许您访问:
configurator.configureHttpClient(name, options)——注册一个命名为HTTP的客户端,并有明确的基础URI和范围.configurator.configureHttp(...)——低级HTTP模块配置.configurator.useFrameworkServiceClient(serviceName, options?)注册客户端通过Fusion服务发现解决.configurator.configureAppIdentification(options)控制x-fusion-app*用于识别后端遥测的应用程序头. 见 应用程序标识信头。 。 。 .
子路径导出
| 导出路径 | 它提供的东西 |
|---|---|
@equinor/fusion-framework-app | configureModules, (中文(简体) ), AppConfigurator, (中文(简体) ), IAppConfigurator,所有类型的别名 |
@equinor/fusion-framework-app/enable-bookmark | enableBookmark 函数 |
@equinor/fusion-framework-app/mock | mockAppModules, (中文(简体) ), AppMockConfigurator, (中文(简体) ), enableAppManifestMock |
配置 HTTP 客户端
这个 AppConfigurator 可以从多个来源注册命名的 HTTP 客户端 ——
应用程序配置终点、服务发现或明确登记 -- --
然后在运行时找到一个 framework.modules.http.createClient(name)。 。 。 .
const initialize = configureModules((configurator) => {
configurator.useFrameworkServiceClient('people');
});
见 配置 HTTP 客户端 自动登记
app.config.ts明确登记,并在客户时解决优先权问题
以多个位置配置.
启用书签
书签模块允许应用程序保存并恢复应用程序状态.
重要内容: 导入
enableBookmark从应用程序级软件包,而不是从@equinor/fusion-framework-module-bookmark直接说.
import { enableBookmark } from '@equinor/fusion-framework-app/enable-bookmark';
const initialize = configureModules((configurator) => {
enableBookmark(configurator);
});
见 启用书签 用于有效载荷生成器清理行为.
测试
从 @equinor/fusion-framework-app/mock 以运行一个应用程序的真实性
试验中的模块管道——实际 event编号 :http编号 :msal 模块,真实
AppConfigurator 配置管道,以及实际生命周期——只有
到达进程外的边框被确定性替换
伪造的 这个入场点不依赖Vitest或任何其他试跑者.
import { mockAppModules } from '@equinor/fusion-framework-app/mock';
const manifest = { appKey: 'my-app', displayName: 'My App', description: 'My app', type: 'standalone' } as const;
const modules = await mockAppModules(undefined, { manifest });
见 测试 页:1 AppMockConfigurator, (中文(简体) ), enableAppManifestMock, (中文(简体) ),
并定制了被嘲笑的父母的服务发现.
类型
| 类型 | 目的 |
|---|---|
AppEnv | 环境描述符( 明显、 配置、 底名、 道具) |
AppModuleInitiator | 配置回调签名 configureModules |
AppModuleInit | 全厂类型包装 AppModuleInitiator |
AppModuleInitArgs | 将参数传递给返回的初始化器 |
AppRenderFn | 将应用程序安装到 DOM 元素的渲染函数 |
AppManifest | 应用程序显示元数据(再导出) |
AppConfig | 特定环境配置(再出口) |
AppModules | 默认应用模块的联盟(再出口) |
AppModulesInstance | 初始化(再出口)后解决模块实例 |
进一步阅读
- 组合框架文件
@equinor/fusion-framework-react-app- 装有钩子和提供商的反应包装器