# @condenast/quick-bus 中文文档

规范地址：https://npmcn.com/package/%40condenast/quick-bus/

版本：0\.2\.0
npm 元数据更新时间：2026-11-09T20:31:13.800Z
中文译文更新时间：2026-11-10T15:02:28.850Z
软件包许可：LICENSE IN LICENSE

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

原始 npm 页面：https://www.npmjs.com/package/%40condenast/quick-bus
原文对照：https://npmcn.com/package/%40condenast/quick-bus/?lang=original

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

- 模块格式：CommonJS
- TypeScript 类型：未声明
- 运行依赖：0 个
- 首次发布：2018-01-10T17:20:46.173Z
- 最新版本发布：2018-01-24T23:56:12.848Z
- 近 30 天下载量：4167（2026-10-11 至 2026-11-09，npm 官方下载统计）
- 已发布版本数：10（近 12 个月 0 个）

## 中文简介

有AMQP和Postal.js等功能的小型快活巴士

## 安装

```sh
npm install @condenast/quick-bus
```

也可以使用：`pnpm add @condenast/quick-bus`、`yarn add @condenast/quick-bus`、`bun add @condenast/quick-bus`

## README

# 快速公交车

一个带有AMQP和Postal.js等功能的小型事件总线,意在在客户端使用.

[![license](https://img.shields.io/badge/license-Apache%202.0-blue.svg?style=flat)](https://npmcn.com/package/%40condenast/quick-bus/LICENSE)

_自豪地建造了:_

[![](https://user-images.githubusercontent.com/1215971/35070721-3f136cdc-fbac-11e7-81b4-e3aa5cc70a17.png "Conde Nast Technology")](https://technology.condenast.com/)

### 这是什么?

这是一个简单的事件总线,在大约80行代码(小于773字节)中复制了Postal.js的基本内容

它不像Postal一样使用regex列表,而是使用定向图,即: _多数_ 快点.

它增加了自动公尺收集的历史,使行数达到大约150行代码(小于1258字节)

它没有依赖关系.

### 如何使用

使用 `emit` 财务报告和审定财务报表 `on` 方法,就像一个常规事件发射器.

```js
var channel = new Bus();

channel.on('metrics.#', function (msg) {
  console.log(msg);
});

channel.emit('metrics.page.loaded', 'hello world');
```

在模仿Postal.js时,使用返回的功能来阻止事件.

```js
var off = channel.on('page.load.justOnce', function (msg) {
  console.log(msg);
  off();
});
```

同样在模仿Postal.js时,使用第二个参数来得到引发事件的主题.

```js
var off = channel.on('page.ad.*.filled', function (msg, meta) {
  console.log(meta.topic + 'just happened');
});
```

如果你更喜欢酒吧和子公司模特儿 我们就别名了 `subscribe` 财务报告和审定财务报表 `publish` 还:

```js
var channel = new Bus();

channel.subscribe('metrics.#', function (msg) {
  console.log(msg);
});

channel.publish('metrics.page.loaded', 'hello world');
```

当然要取消订阅, 请使用返回的函数 :

```js
var unsubscribe = channel.subscribe('#', function (msg) {
  console.log(Date.now(), msg);
});

for (var i = 0; i < 10; i++) {
  channel.publish('welcome.' + i, 'hello world!');
}

unsubscribe();
```

### 如何运作

A型客车绘制了直线订阅图. 随着事件主题的发布,图中发现了所有订阅者以通知,然后缓存结果,以在未来更快地发布消息. 当新增订阅者时,会修改图表并重置订阅者缓存.

### 通关卡订阅

支持与Postal.js相同的通配符,例如:

#### 使用零或更多单词 `#`

```js
channel.subscribe('#.changed', function (msg) {
  // ...
});
channel.emit('what.has.changed', event);
```

```js
channel.subscribe('metrics.#.changed', function (msg) {
  // ...
});
channel.emit('metrics.something.important.has.changed', event);
```

#### 使用单词 `*`

```js
channel.subscribe('ads.slot.*.filled', function (msg) {
  // ...
});
channel.emit('ads.slot.post-nav.filled', {data, msg});
```

### 历史

我们保存着已发生事件的历史。 他们可以被问到 `history` 方法 :

```js
var channel = new Bus();

channel.emit('ads.slot.post-nav.filled', {data, msg});
channel.emit('ads.slot.side-rail.filled', {thing, stuff});
channel.emit('ads.slot.instream-banner-0.filled', {a, b});
channel.emit('metrics.component.absdf2324.render.start', {etc, ie});
channel.emit('metrics.component.absdf2324.render.end', {etc, ie});

// gets the ad slots that were filled
var history = channel.history('ads.slot.*.filled');

// gets history of components rendering
var history = channel.history('metrics.component.*.render.*');
```

格式是数组。 例如:

```json
[
  ["ads.slot.post-nav.filled", 1515714470550],
  ["ads.slot.side-rail.filled", 1515714470559],
  ["ads.slot.instream-banner-0.filled", 1515714500268],
  ["metrics.component.absdf2324.render.start", 1515714782584],
  ["metrics.component.absdf2324.render.end", 1515714790507],
]
```

只存储每个事件的话题和时间戳. 我们不会在历史中存储信息/负载,以防止潜在的内存泄露和范围界定问题.

这些事件被储存在一个环缓冲器中,所以一旦达到一定的大小,旧事件就会从历史中消失. 历史规模为当前设置,最多9999个事件.

请注意,这一特性是为下列目的设计的: _计量_,而且人们对衡量标准感兴趣的信息往往可以作为专题的一部分。 例如,如果你有一个订阅者 `on('components.*.render.start')`,然后可以拥有无限数量的组件编号,例如: `emit('components.abcdef.render.start')` 财务报告和审定财务报表 `emit('components.someRandomId.render.start')` 不给活动总线增加任何复杂性或性能处罚。 如果你试图获取更多无法作为话题一部分包含的信息,那么你应该让一个订阅者登录这些信息.

看看我们 [实例 页次](https://github.com/CondeNast/quick-bus/blob/master/EXAMPLES.md) 对于一些常见的代码模式与事件总线.

### 待执行

-   确定是否应该包括Postals.js的"meta"字段,或者是否只是承诺API讨厌的重量
-   我们应披露时间信息还是信息编号?
-   一个收集、缓冲或节流消息的同步机制是否有用? 是否使用事件队列 ?
-   我们实际使用的邮政还有其他特征吗?

### 未来/相关架构

-   创建专门从 React 生成事件的助手库
-   创建库以链接到浏览器事件( Boomeram)
-   创建库来收集事件并转发到Sparrow,GA或BooCatch等服务器.

### 有关文件

-   [许可证 - Apache 2. 0](https://github.com/CondeNast/quick-bus/blob/master/LICENSE.md)
-   [行为守则 -- -- 《促进者公约》v1.4](https://github.com/CondeNast/quick-bus/blob/master/CODE_OF_CONDUCT.md)
-   [贡献准则 -- -- 原子和铁路](https://github.com/CondeNast/quick-bus/blob/master/CONTRIBUTING.md)

### 相关议题

-   [RabbitMX主题交换教程解释 \*和#通配符](https://www.rabbitmq.com/tutorials/tutorial-five-javascript.html)

## 常见问题

### @condenast/quick-bus 是什么？

有AMQP和Postal\.js等功能的小型快活巴士

### 如何安装 @condenast/quick-bus？

在项目目录运行 npm install @condenast/quick-bus，或使用 pnpm add / yarn add / bun add。

### @condenast/quick-bus 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/condenast\_\_quick-bus 是否存在。

### @condenast/quick-bus 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @condenast/quick-bus 可以商用吗？

@condenast/quick-bus 使用 LICENSE IN LICENSE 许可。声明的许可为 LICENSE IN LICENSE，请阅读许可原文确认使用条件。以上为概括，不构成法律意见，请以许可原文为准。

### @condenast/quick-bus 的下载量有多少？

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

### @condenast/quick-bus 还在维护吗？

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

