# @equinor/fusion-framework 中文文档

规范地址：https://npmcn.com/package/%40equinor/fusion-framework/

版本：9\.1\.0
npm 元数据更新时间：2026-11-12T09:56:56.261Z
中文译文更新时间：2026-11-13T20:19:40.843Z
软件包许可：ISC

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40equinor/fusion-framework
原文对照：https://npmcn.com/package/%40equinor/fusion-framework/?lang=original
项目主页：https://equinor.github.io/fusion-framework/
源码仓库：https://github.com/equinor/fusion-framework

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：509 kB，49 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：9 个
- 首次发布：2021-06-08T13:16:50.203Z
- 最新版本发布：2026-11-12T09:56:55.423Z
- 近 30 天下载量：10075（2026-10-14 至 2026-11-12，npm 官方下载统计）
- 已发布版本数：339（近 12 个月 53 个）

## 中文简介

暂无中文简介

## 安装

```sh
npm install @equinor/fusion-framework
```

也可以使用：`pnpm add @equinor/fusion-framework`、`yarn add @equinor/fusion-framework`、`bun add @equinor/fusion-framework`

## README

# @ equinor/ 聚变框架

> Bootstrap并配置核心Fusion框架模块图——认证,HTTP,服务发现,上下文,遥测等——在一个单一初始化调用中.

## 这是什么包裹?

`@equinor/fusion-framework` 是启动“融合框架”实例的顶级切入点。 它将内置模块集(MSAL auth,HTTP客户端工厂,服务发现,服务,上下文,事件总线,和遥测)捆绑在单个模块后 `FrameworkConfigurator` 编号 : `init` API使得消费者不必将每个模块单独接通.

**当** 您正在构建一个门户 shell, 一个独立的应用程序主机, 或任何需要 Fusion 模块堆栈的运行时间 。 运行的微前端应用程序 _内部_ 一个已初始化的门户网站通常使用 `@equinor/fusion-framework-react-app` 换句话说.

## 快开始

```typescript
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 的客户端

```typescript
configurator.configureHttpClient('my-api', {
  baseUri: 'https://api.example.com',
  defaultHeaders: { 'X-Custom': 'value' },
});
```

### 可选认证

```typescript
// Pass `false` as second argument to make auth optional
configurator.configureMsal(msalConfig, false);
```

### 用自定义模块扩展

```typescript
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` 未设置工具。 不创建出口国 .

```ts
// 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` 在没有证书、没有网络接入和没有配置的测试中初始化框架.

```typescript
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: 'ada@equinor.com',
      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本身——监视个别电话是你们试跑者的工作.

## 文档

| 指南 | 封面 |
| --- | --- |
| [选择测试层](https://npmcn.com/package/%40equinor/fusion-framework/docs/testing-choosing-a-layer.md) | 用于 React app、 框架、 模块、 HTTP 和跑道级测试的导入 |
| [测试](https://npmcn.com/package/%40equinor/fusion-framework/docs/testing.md) | 选择用户、签名测试、编制服务注册、监视和配置为应用程序 |
| [测试-设计](https://npmcn.com/package/%40equinor/fusion-framework/docs/testing-design.md) | 何以取而代之,何以取而代之,何而取而取之;何而取而取而取而取而取而取之;何而取而取而取而取而取而取而取而取而取而取而取之;何而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取之而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取而取 |
| [测试-为另一个模块添加一个模拟器](https://npmcn.com/package/%40equinor/fusion-framework/docs/testing-extending.md) | 向自己的模块提供测试双倍,哪些框架模块尚未覆盖 |
| [测试 - API](https://npmcn.com/package/%40equinor/fusion-framework/docs/testing-api.md) | 每个模拟导出和拥有的软件包 |

## 进一步阅读

📚 [完整文档](https://equinor.github.io/fusion-framework/)

## 常见问题

### 如何安装 @equinor/fusion-framework？

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

### @equinor/fusion-framework 支持 TypeScript 吗？

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

### @equinor/fusion-framework 支持 ESM 还是 CommonJS？

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

### @equinor/fusion-framework 可以商用吗？

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

### @equinor/fusion-framework 的下载量有多少？

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

### @equinor/fusion-framework 还在维护吗？

最新版本 9\.1\.0 发布于 2026/11/12（1 天前）；至今共发布 339 个版本，其中过去 12 个月发布了 53 个；首次发布于 2021/06/08。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

