@equinor/fusion-framework-module-app

中文文档
8.3.0发布于 2026/11/12ISCTypeScriptES Module近 30 天下载 1.2万
中文使用文档
文档目录13 节
  1. 何时使用
  2. 快速启动
  3. 核心概念
  4. 应用程序
  5. 应用
  6. 用户
  7. 应用程序
  8. 应用程序配置器
  9. 活动
  10. 处理错误
  11. 操作遥测
  12. 测试
  13. 主要出口

@ equinor/ 组合框架- 模块- app

用于运行时加载,配置和管理Fusion应用程序的框架模块.

主要用于: 门户主机 和其他需要动态发现、加载和在应用程序之间切换的框架发起者。 模块处理显示获取、构建解析度、配置加载、每个用户的应用程序设置,以及应用程序捆绑的脚本导入.

何时使用

  • 您正在构建一个门户或外壳, 托管多个 Fusion 应用程序 .
  • 您需要从 Fusion app 服务中获取应用程序清单和配置 .
  • 您需要在运行时动态导入应用程序的 JavaScript 捆绑 .
  • 您需要读取或写入每个用户的应用程序设置 .

[注] 通过设计,这个模块只允许 一个活动应用程序 一次( e)currentApp) (中文(简体) ). 如果您需要多个并行应用实例,请使用部件模块取而代之 .

快速启动

启用框架配置符中的模块 :

import { enableAppModule } from '@equinor/fusion-framework-module-app';

export const configure = async (configurator: FrameworkConfigurator) => {
  enableAppModule(configurator);
};

一旦启用 AppModuleProvider 可在框架实例中找到:

const appProvider = framework.modules.app;

// Set the current application by key
appProvider.setCurrentApp('my-app');

// React to current app changes
appProvider.current$.subscribe((app) => {
  if (app) {
    console.log('Current app:', app.appKey);
  }
});

核心概念

应用程序

主运行时间入站. 提供下列方法:

  • 获取清单 – 说吧 – getAppManifest(appKey) 财务报告和审定财务报表 getAppManifests() 返回可观测流 AppManifest 对象.
  • 获取配置 – 说吧 – getAppConfig(appKey) 返回应用程序的环境和端点配置.
  • 管理设置 – 说吧 – getAppSettings(appKey) 财务报告和审定财务报表 updateAppSettings(appKey, settings) 每个用户读取和写入设置.
  • 设置/ 清除当前应用程序 – 说吧 – setCurrentApp(appKey) 创建一个 App 实例并发布 current$。 。 。 . clearCurrentApp() 处理当前应用程序 .

应用

代表一个装入的应用程序 。 通过被动状态机器管理显示、配置、设置和导入脚本模块的内部状态(FlowSubject) (中文(简体) ). 密钥可观察到 :

可观察输出
manifest$AppManifest 解决后
config$AppConfig 解决后
settings$AppSettings (比较订阅)
modules$已导入 AppScriptModule
instance$已初始化 AppModulesInstance
status$一组在建行动类型

打电话 app.initialize() 将显示、配置和脚本平行地加载,并将其作为可观测的集合.

用户

与Fusion App服务API通信的低等HTTP客户端. 处理缓存( 通过 Query),响应解析(通过Zod schemas),以及将错误映射到打入错误类(AppManifestError, (中文(简体) ), AppConfigError, (中文(简体) ), AppBuildError, (中文(简体) ), AppSettingsError) (中文(简体) ).

应用程序

不可移动、被深冻的配置对象 environment (任意键值数据)和 endpoints (有 OAuth 范围的名称 URL). 使用 config.getEndpoint('api') 以获取特定终点.

应用程序配置器

模块初始化时使用的配置构建器 。 允许压倒默认的 HTTP 客户端和资产 URI :

enableAppModule(configurator, (builder) => {
  builder.setClient(async (args) => {
    const http = await args.requireInstance('http');
    return new AppClient(http.createClient('my-custom-apps'));
  });
  builder.setAssetUri('/custom-proxy');
});

活动

当 EventModule 可用时,应用程序模块会发送显示、配置、设置和脚本加载的生命周期事件。 主要活动包括:

  • onCurrentAppChanged - 当 setCurrentApp 或者说 clearCurrentApp 名为
  • onAppManifestLoad 编号 : onAppManifestLoaded 编号 : onAppManifestFailure
  • onAppConfigLoad 编号 : onAppConfigLoaded 编号 : onAppConfigFailure
  • onAppSettingsLoad 编号 : onAppSettingsLoaded 编号 : onAppSettingsFailure
  • onAppScriptLoad 编号 : onAppScriptLoaded 编号 : onAppScriptFailure
  • onAppInitialize 编号 : onAppInitialized 编号 : onAppInitializeFailure
  • onAppDispose

处理错误

所有 API 请求映射 HTTP 状态代码以输入错误类 :

错误类当抛出时
AppManifestError求解失败( 404, 401, 410)
AppConfigError配置获取失败
AppBuildError构建元数据获取失败
AppSettingsError设置获取或更新失败
AppScriptModuleError脚本导入失败

每个错误包括: type 财产('not_found', (中文(简体) ), 'unauthorized', (中文(简体) ), 'deleted',或 'unknown'用于方案处理.

操作遥测

提供工具 TelemetryConnectable ,并通过 telemetry.scope('app'),有一个懒惰的工厂 倒背旧的定制供应商. 每个应用程序都拥有一个儿童范围;舞台观察员留在当地, 时间、安全身份和处置采用共享遥测方法.

当主机登记遥测时,每个应用程序都会报告一个 fusion.app.<stage>.duration 每个尝试阶段的结果: load-manifest, (中文(简体) ), load-config, (中文(简体) ), load-settings, (中文(简体) ), update-settings, (中文(简体) ), import, (中文(简体) ), load,以及 unload 当应用程序被替换或清除时. load 每个结果 initialize() 订阅:结果、错误或 cancelled 当召人先不订阅. 结果是 success, (中文(简体) ), failure (单位:千美元) 一个消毒 .failure 例外; 阶段故障带有静态原因, 如 not-found)或(或) cancelled (理由 superseded, (中文(简体) ), unloaded,或 disposed 当应用程序 模块被处理). 丢出记录失败的倒数 unload记录只携带 验证的 appKey 财务报告和审定财务报表 appVersion; 清单、配置、设置、 URL 和 错误消息从不导出 。 一个被替换的应用程序 停止载入报告, 即便同步模块被拆卸等待;其单独拥有 unload 当拆解结束时,测量结束。 排队阶段结果与 产生它们的请求, 不是一个新的请求 在同一阶段.

遥测在初始化后是相连的 从未等待过 所以装入结果, 错误和取消保持不变。 排除带有遥测适配器的这些记录 打开中继过滤器 diagnostic.module === 'app'。见 操作遥测。 。 。 .

测试

从 @equinor/fusion-framework-module-app/mock 以服务一个应用程序的列表 并本地配置, 而不是联系应用程序服务 。 真实的 AppClient 仍然支持所有其他请求——其他应用密钥,标记请求,构建, 设置——如此指向 setClient 在不同的 http 客户端或服务中 发现登记册的工作保持不变.

import { MockAppClient } from '@equinor/fusion-framework-module-app/mock';

enableAppModule(configurator, (builder) => {
  builder.setClient(async ({ requireInstance }) => {
    const http = await requireInstance('http');
    return new MockAppClient(http.createClient('apps'), manifest, config);
  });
});

getAppManifest 仅本地解析 manifest.appKey 没有 tag 时间 都说吧. getAppConfig 决定 manifest.appKey 何时 tag 要么缺席 或等于仪表本身 build.version - 同样的标签 App 请求 当装入显示器的配置时,它已经解决了。 任何其他应用密钥, 标记,否则错误的请求会传递给真正的客户端.

[注] @equinor/fusion-framework-app/mock是因为 mockAppModules 以此为基础 类,通常是测试应用程序的更简单的切入点—— 见它的 测试 向导.

主要出口

导出说明
enableAppModule用框架配置器注册模块
AppModuleProvider具有应用生命周期方法的运行时间提供者
AppClient应用服务的低级 HTTP 客户端
AppConfigurator模块设置配置构建器
AppConfigImmultable app 配置 (env + end points) 软件
App 编号 : IApp反应状态的申请实例
AppModule框架的模块定义
MockAppClient测试双倍服务一个应用程序的显示和本地配置( T)/mock(中文(简体) )

版本与发布记录

@equinor/fusion-framework-module-app 共发布 249 个版本,首次发布于 2022/01/14;过去 12 个月发布了 29 个版本。

版本发布日期距今
8.3.0latest2026/11/121 天前
8.3.0-next.1next2026/11/112 天前
8.3.0-next.02026/10/2816 天前
8.2.22026/10/1727 天前
8.2.2-trusted-publishing-20261015-9dfe7602cd2a49a8a9df00d62c26e7304a82a85atrusted-publishing-202610152026/10/1629 天前
8.2.12026/10/121 个月前

其他发布通道:apploader → 6.1.14-apploader-be21a6b60eb13eee8bf869e75002d8634e9c50a9,cli-search-index → 7.1.1-cli-search-index.0,msal-v5 → 7.2.3-msal-v5.0,trusted-publishing-20261015 → 8.2.2-trusted-publishing-20261015-9dfe7602cd2a49a8a9df00d62c26e7304a82a85a,next → 8.3.0-next.1。

关于 @equinor/fusion-framework-module-app 的常见问题

如何安装 @equinor/fusion-framework-module-app?

在项目目录运行 npm install @equinor/fusion-framework-module-app,或使用 pnpm add / yarn add / bun add。

@equinor/fusion-framework-module-app 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@equinor/fusion-framework-module-app 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@equinor/fusion-framework-module-app 可以商用吗?

@equinor/fusion-framework-module-app 使用 ISC 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@equinor/fusion-framework-module-app 的下载量有多少?

根据 npm 官方下载统计,@equinor/fusion-framework-module-app 在 2026/10/14 – 2026/11/12 这 30 天内被下载 12,176 次,日均约 406 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@equinor/fusion-framework-module-app 还在维护吗?

最新版本 8.3.0 发布于 2026/11/12(1 天前);至今共发布 249 个版本,其中过去 12 个月发布了 29 个;首次发布于 2022/01/14。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。