@equinor/fusion-framework-module

中文文档
6.2.0发布于 2026/11/12ISCTypeScriptES Module近 30 天下载 1.7万
中文使用文档
文档目录18 节
  1. 关键概念
  2. 模块
  3. 模块配置器
  4. Basefig 构建器
  5. BaseModule 创建器
  6. 文档
  7. 安装
  8. 快速启动——定义模块
  9. 出口
  10. 主要入口点 @equinor/fusion-framework-module (中文(简体) )
  11. 配置子路径( S) @equinor/fusion-framework-module/configurator (中文…
  12. 子路径( E) @equinor/fusion-framework-module/plugins (中文(简体) )
  13. 提供子路径 @equinor/fusion-framework-module/provider (中文(简体) )
  14. 模块周期
  15. 有需要的跨模块依赖性
  16. 启动和完整模块映射
  17. 插件和主机级副作用
  18. 相关软件包

@ equinor/ 组合框架- 模块

融合框架核心模块系统. 这个软件包定义了每个Fusion框架模块所依赖的合同,基础类和管弦逻辑.

使用此软件包 正在编写新模块 或者需要了解模块生命周期是如何运作的。 应用程序开发人员通常通过更高层次的软件包,例如 @equinor/fusion-framework-react。 。 。 .

关键概念

模块

A 类 Module 是宣告名称、可选配置厂、 initialize 方法,以及可选的生命周期钩(postConfigure, (中文(简体) ), postInitialize, (中文(简体) ), dispose) (中文(简体) ). 模块是Fusion应用程序的构件.

模块配置器

ModulesConfigurator 协调整个模块生命周期:

  1. 配置 - 每个模块的 configure() 工厂创建一个配置构建器; 注册回调使其变异; postConfigure() 钩而跑.
  2. 初始化 - 模块同时初始化;跨模块依赖性通过 requireInstance()。 。 。 .
  3. 初始化后 – 说吧 – postInitialize() 钩子和 onInitialized 调用运行.
  4. 插件 – 注册插件在每个模块准备好后连接主机级副作用.

结果是密封 ModulesInstance 其属性名称与模块密钥相匹配,其值为初始化提供者.

Basefig 构建器

用于构建模块配置的抽象类声明. 子类暴露出打入的设置方法(例如. setBaseUrl用于注册回调。 在初始化过程中,框架收集了所有已注册的回调,解析,并将结果合并为一个配置对象.

BaseModule 创建器

模块提供者摘要基础类(运行时实例由 initialize()) (中文(简体) ). 它管理着一个 Subscription 自动拆卸的容器 SemanticVersion 用于兼容性检查.

文档

专题说明
概念模块系统概览、作用和精神模式
生命周期配置-初始化-初始化后-处置相序
配置如何注册模块和使用 addConfig 编号 : configure
跨部门依赖requireInstance 模块间依赖关系模式
插件registerPlugin, (中文(简体) ), createPlugin,插件拆卸,以及主机级副作用
活动event$ 观察和事件命名公约
撰写模块创建自定义模块的分步指南
常见错误FAQ 式陷阱和如何避免它们

安装

pnpm add @equinor/fusion-framework-module

快速启动——定义模块

import {
  type Module,
  BaseConfigBuilder,
  type ConfigBuilderCallback,
} from '@equinor/fusion-framework-module';
import { BaseModuleProvider } from '@equinor/fusion-framework-module/provider';

// 1. Define the configuration shape
interface GreeterConfig {
  greeting: string;
}

// 2. Create a config builder
class GreeterConfigurator extends BaseConfigBuilder<GreeterConfig> {
  setGreeting(cb: ConfigBuilderCallback<string>) {
    this._set('greeting', cb);
  }
}

// 3. Create a provider
class GreeterProvider extends BaseModuleProvider<GreeterConfig> {
  #config: GreeterConfig;

  greet(name: string): string {
    return `${this.#config.greeting}, ${name}!`;
  }

  constructor(args: { version: string; config: GreeterConfig }) {
    super(args);
    this.#config = args.config;
  }
}

// 4. Define the module
export const greeterModule: Module<'greeter', GreeterProvider, GreeterConfigurator> = {
  name: 'greeter',
  configure: () => new GreeterConfigurator(),
  initialize: async ({ config }) => {
    const resolved = await config.createConfigAsync({
      config: {},
      hasModule: () => false,
      requireInstance: () => Promise.reject('no modules'),
    });
    return new GreeterProvider({ version: '1.0.0', config: resolved });
  },
};

出口

主要入口点@equinor/fusion-framework-module(中文(简体) )

导出仁爱说明
Module类型描述模块结构和生命周期钩的界面
ModulesConfigurator类管弦乐配置 → 初始化 → 插件 → 处理一组模块
IModulesConfigurator接口模块配置器的公共合同
IModuleConfigurator接口使用生命周期钩注册单一模块的说明
BaseConfigBuilder类有点-路径瞄准和可观测管线的抽象配置构建器
ConfigBuilderCallback类型配置构建器设置所用的召回签名
ConfigBuilderCallbackArgs类型参数传递给配置构建器的回调
ModuleConfigBuilder类折旧 - 使用 BaseConfigBuilder 换成
initializeModules函数方便包装 configurator.initialize()
SemanticVersion类扩展 SemVer 带有 satisfies() 方法
ModuleConsoleLogger类模块名称格式化的样式控制台日志
IModuleConsoleLogger接口锁定接口 formatModuleName
DotPath, (中文(简体) ), DotPathType, (中文(简体) ), DotPathUnion类型递归点标记路径公用事业

配置子路径( S)@equinor/fusion-framework-module/configurator(中文(简体) )

导出仁爱说明
ModuleConfiguratorEventBaseName针头共享 ModuleConfigurator 配置器生命周期事件名称的基段
ModuleConfiguratorEventName对象地图 ModuleConfigurator.{name}.{state} 用于过滤的事件名称 event$ 没有硬码字符串

子路径( E)@equinor/fusion-framework-module/plugins(中文(简体) )

导出仁爱说明
createPlugin函数为稳定的生命周期诊断创建一个命名的插件召回
FrameworkPluginArgs类型传递给内置插件调用参数:初始化模块和可选参考
FrameworkPluginCallback类型接受回电 IModulesConfigurator.registerPlugin
FrameworkPluginTeardown类型由插件返回的清理回调或可支配对象
FrameworkPluginRegistration类型插件返回类型: 拆卸或 undefined
FrameworkPlugin接口命名的插件调用返回 createPlugin
FrameworkPluginInitializer类型开发者使用的回调签名 createPlugin

提供子路径@equinor/fusion-framework-module/provider(中文(简体) )

导出仁爱说明
IModuleProvider接口合同每个模块提供者必须满足
BaseModuleProvider类带有版本、订阅管理和处理的文摘基础
BaseModuleProviderCtorArgs类型构造参数 BaseModuleProvider

模块周期

┌─────────────────────────────────────────────────────┐
│                  ModulesConfigurator                 │
├──────────┬──────────────────────────┬────────────────┤
│ Phase    │ Module Hook              │ Consumer Hook  │
├──────────┼──────────────────────────┼────────────────┤
│ Configure│ module.configure()       │ addConfig()    │
│          │ module.postConfigure()   │ onConfigured() │
├──────────┼──────────────────────────┼────────────────┤
│ Init     │ module.initialize()      │                │
│          │ module.postInitialize()  │ onInitialized()│
├──────────┼──────────────────────────┼────────────────┤
│ Plugin   │                          │ registerPlugin │
├──────────┼──────────────────────────┼────────────────┤
│ Dispose  │ module.dispose()         │ instance.      │
│          │                          │  dispose()     │
└──────────┴──────────────────────────┴────────────────┘

有需要的跨模块依赖性

模块同时初始化 。 使用 requireInstance(name, timeout?) 内部 initialize 等待依赖:

initialize: async ({ config, requireInstance, hasModule }) => {
  // Wait for the event module (with optional timeout in ms)
  const event = await requireInstance('event', 5000);
  return new MyProvider(config, event);
},

requireInstance 返回当请求的模块完成初始化时解析的许诺。 如果模块没有注册,承诺会拒绝.

启动和完整模块映射

postInitialize 运行后 全部 模块已初始化。 它收到满分 modules 地图,使它成为跨模块接线的正确位置,这取决于每个模块是否准备好:

postInitialize: async ({ instance, modules }) => {
  // All modules are available here
  modules.event.addEventListener('onContextChanged', (e) => {
    instance.handleContextChange(e.detail);
  });
},

configure 财务报告和审定财务报表 initialize 是两个需要的钩. postConfigure, (中文(简体) ), postInitialize,以及 dispose 是可选的.

插件和主机级副作用

使用 registerPlugin 用于在制作前需要完整的模块实例的应用程序自有接线。 插件运行后 postInitialize 财务报告和审定财务报表 onInitialized,但在 initialize() 决定。 返回已撕毁的回调, 以清理订阅、 全球收听器、 计时器或处理时的遥测绑定 .

import { createPlugin } from '@equinor/fusion-framework-module/plugins';

const contextTelemetryPlugin = createPlugin<[typeof eventModule, typeof telemetryModule]>(
  'contextTelemetry',
  (modules) => modules.event.addEventListener('context:changed', (event) => {
    modules.telemetry.track('context.changed', event.detail);
  }),
);

configurator.registerPlugin(contextTelemetryPlugin);

见 插件 用于拆解规则、失败行为和API参考.

事件在 configurator.event$ 用于遥测和调试的整个生命周期.

  • @equinor/fusion-framework-react - 消费模块的反应装订和钩子
  • @equinor/fusion-framework-module-http – HTTP 客户端模块基于此系统
  • @equinor/fusion-framework-module-service-discovery - 服务发现模块

版本与发布记录

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

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

其他发布通道:apploader → 4.4.3-apploader-be21a6b60eb13eee8bf869e75002d8634e9c50a9,cli-search-index → 5.0.6-cli-search-index.0,msal-v5 → 5.0.6-msal-v5.0,trusted-publishing-20261015 → 6.1.6-trusted-publishing-20261015-9dfe7602cd2a49a8a9df00d62c26e7304a82a85a,next → 6.2.0-next.1。

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

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

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

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

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

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

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

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

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

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

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

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

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