@bloomreach/navapp-communication

中文文档
3.5.0发布于 2026/10/15TypeScriptESM + CJS零依赖近 30 天下载 3088
中文使用文档
文档目录9 节
  1. 谁用
  2. 使用量
  3. 儿童申请
  4. 在父( 导航)
  5. 没有捆绑
  6. 知情的行为
  7. 向 API 添加方法
  8. 发展
  9. 释放

导航通信

@bloomreach/navapp-communication bloomreach 导航应用软件库(导航)和 它的主机用来相互交谈的应用程序.

导航程序将每个应用程序装入自己的iframe,可能来自另一个来源. 这个图书馆设置了一个打字机, 基于承诺的API双向跨 Iframe 边界:

  • 页:1 父目录 (导航) 暴露一个 ParentApi 应用程序调用,例如更新浏览器 URL,显示口罩或关闭弹出;
  • 每个 儿童 (iframe中的应用)暴露于 ChildApi 纳瓦普呼叫,例如 导航,收集导航物品或登出.

盖下它用 彭帕尔 (v4) 联合国 postMessage 握手和方法 打电话.

┌──────────────────────── navapp (parent) ────────────────────────┐
│  connectToChild({ iframe, methods: ParentApi }) → ChildApi       │
│                                                                  │
│   ┌──── iframe: CMS ─────┐        ┌──── iframe: popup app ────┐  │
│   │ connectToParent({    │        │ connectToParent({         │  │
│   │   methods: ChildApi  │        │   methods: ChildApi       │  │
│   │ }) → ParentApi       │        │ }) → ParentApi            │  │
│   └──────────────────────┘        └───────────────────────────┘  │
└──────────────────────────────────────────────────────────────────┘

孩子们从不直接交谈 当一个应用程序需要从另一个应用程序得到什么时(例如弹出) 请求 CMS 打开文档,它称为 ParentApi 方法 和 navapp 将呼叫转发给合适的孩子.

谁用

消费者作用
community/navigation-application父: 执行 ParentApi 内 ConnectionService
CMS( 钱包)子 : 装入 UMD 捆绑和执行 ChildApi 内 navapp-bridge.js
community/channel-manager/ui儿童
community/cms/frontend儿童
enterprise/wpm/frontend/project-management儿童
enterprise/ai-service/client/assistant-angular儿童(人数)

每个消费者在自己的版本中标注 package.json,所以他们并不都使用相同的释放.

使用量

安装库及其对等依赖 :

npm install @bloomreach/navapp-communication penpal@^4

儿童申请

在应用程序启动时连接到父程序一次, 并保存返回 ParentApi数字 :

import { ChildApi, connectToParent, ParentApi } from '@bloomreach/navapp-communication';

const childApi: ChildApi = {
  getConfig: async () => ({ apiVersion: '3.3.0' }),
  navigate: async (location, triggeredBy) => router.navigate(location.path),
  beforeNavigation: async () => !hasUnsavedChanges(),
};

const parentApi: ParentApi = await connectToParent({
  // Must be the navapp's origin, or the connection is refused. window.location.origin only works when the
  // application is served from the same origin as the navapp; otherwise pass the navapp's origin explicitly.
  parentOrigin: window.location.origin,
  methods: childApi,
});

const { userSettings } = await parentApi.getConfig();
await parentApi.updateNavLocation({ path: 'documents/123', breadcrumbLabel: 'My document' });

全体 ChildApi 方法是可选的。 只执行您的应用程序支持的那些 .

在父( 导航)

import { connectToChild, ParentApi } from '@bloomreach/navapp-communication';

const childApi = await connectToChild({
  iframe,                         // the iframe element hosting the child
  methods: parentApi,             // the ParentApi implementation
  connectionTimeout: 30000,       // ms to wait for the handshake
  methodInvocationTimeout: 30000, // ms to wait for each child method call
});

const navItems = await childApi.getNavItems?.();

没有捆绑

该图书馆还作为UMD捆绑出版(Udist/index.umd.js登记全球 window.brNavappCommunication它期望 Penpal 首先作为全局加载 Penpal。这是CMS如何使用 这个.

知情的行为

  • 可选方法用可选的链条来称呼. 连接的应用程序只会暴露它执行的方法 更古老的应用软件可能不知道更新的方法,所以称它们为 api.someMethod?.()。 。 。 .
  • 方法超时. connectToChild 包住每个孩子的方法,以拒绝 "<method> call timed out" 之后 methodInvocationTimeout ms,或者5分钟 如果你没有设置一个. beforeNavigation 财务报告和审定财务报表 openPicker 从来没有 包裹, 因为他们等待用户回答对话框或选择项目 。 过 0 或关闭超时的负值.
  • 握手复会. Penpal v4只发出一次握手,所以一个孩子在父母听话前就装入 永远不会连接. connectToParent 每秒重发一次握手,直到父母回复为止.
  • 版本检查. getVersion() 返回库版本。 导航报告是 ParentConfig.apiVersion, (中文(简体) ), 儿童报告其实施的版本 ChildConfig.apiVersion。 。 。 .

向 API 添加方法

新能力通常会触及到库,导航和至少一个孩子:

  1. 将方法添加到 ParentApi 和(或) ChildApi 内 src/lib/api.ts,并附有医生的评论. 制作新方法 选项 (单位:千美元)myMethod?: ...),因此针对更古老的版本所构建的应用程序仍然会编译并运行. 从同一文件中导出任何新类型 .
  2. 在导航上执行 ConnectionService (单位:千美元)getParentApiMethods)并添加一个 spec.
  3. 在儿童申请中执行或调用需要的,使用可选的链条.
  4. 跳出库版(小于新可选方法),然后发布(参见 释放,并更新 依赖每一个使用新类型的消费者.

TypeScript 消费者只在步骤4后看到新类型. 在那之前,他们的建筑失败 错误如 Property 'myMethod' does not exist on type 'ParentApi'。在发布前尝试修改,构建库并复制 dist/* 进入消费者 node_modules/@bloomreach/navapp-communication/dist/下一个 npm ci 还原它.

CMS 桥(navapp-bridge.js)是平版JavaScript和Penpal匹配方法的名称,因此不需要新的 库版本.

发展

此库的工具链比 Angular 应用程序要老' (参见仓库) CLAUDE.md 联 合 国 预期节点和npm版本.

npm ci                  # install dependencies
npm run build           # build dist/ (UMD, ES module and type definitions) with rollup
npm start               # rebuild on every change
npm run test:single-run # run the unit tests once
npm test                # run the tests in watch mode, with coverage
npm run lint            # lint src/
npm run docs            # generate the API docs with TypeDoc

npm run build 打印一系列 (!) Plugin typescript 关于警告 node_modules/@types/node 财务报告和审定财务报表 undici-types。它们来自这里使用的 TypeScript 版本, 它太老了, 无法分析最近的节点类型定义 测试工具带来。 它们是无害的: created dist/index.js 财务报告和审定财务报表 created dist/index.d.ts。 。 。 .

释放

没有CI的工作来出版这个图书馆。 释放是用手进行的:

  1. 弹出 version 内 package.json (和 package-lock.json) (中文(简体) ).
  2. 做测试吧 npm publish 从此目录. prepack 正在建设 dist/ 先说 出版需要写 访问 @bloomreach npm 范围.
  3. 在需要发布版本的消费者中更新版本,并刷新他们的锁文件.

版本与发布记录

@bloomreach/navapp-communication 共发布 77 个版本,首次发布于 2019/05/08;过去 12 个月发布了 9 个版本。

版本发布日期距今
3.5.0latest2026/10/1524 天前
3.5.0-alpha2026/10/1524 天前
3.4.0-alpha2026/10/1424 天前
3.3.52026/10/071 个月前
3.3.5-alpha.1CMS-191422026/10/071 个月前
3.3.42026/02/208 个月前

其他发布通道:CMS-17827 → 3.3.1-alpha.1,CMS-17894 → 3.3.1-alpha.3,CMS-18100 → 3.3.1-alpha.4,CMS-18386 → 3.3.3-alpha.1,CMS-18198 → 3.3.4-alpha.1,CMS-19142 → 3.3.5-alpha.1。

关于 @bloomreach/navapp-communication 的常见问题

如何安装 @bloomreach/navapp-communication?

在项目目录运行 npm install @bloomreach/navapp-communication,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:penpal(^4.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@bloomreach/navapp-communication 支持 TypeScript 吗?

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

@bloomreach/navapp-communication 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@bloomreach/navapp-communication 可以商用吗?

@bloomreach/navapp-communication 使用 未声明 许可。package.json 没有声明许可证。没有许可证的代码默认保留全部权利,商用前请联系作者或查看仓库中的 LICENSE 文件。以上为概括,不构成法律意见,请以许可原文为准。

@bloomreach/navapp-communication 的下载量有多少?

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

@bloomreach/navapp-communication 还在维护吗?

最新版本 3.5.0 发布于 2026/10/15(24 天前);至今共发布 77 个版本,其中过去 12 个月发布了 9 个;首次发布于 2019/05/08。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。