Antora 扩展
Antora 提供基于事件的扩展工具,您可以利用它来增强或影响生成器的功能。该扩展工具专为各种经验水平的用户设计。本页简要介绍了扩展工具的工作原理,并介绍了创建或使用扩展所需的概念和术语。随后的页面将引导您创建第一个扩展。
生成器事件
正如在 ROOT:how-antora-works.adoc 中所述,Antora 的网站生成器是一连串离散的功能性步骤,逐步生成静态网站。这一系列步骤从阅读 playbook 和收集源材料开始。最后将 HTML 文件和网络资产发布到输出目的地。Antora 的扩展工具由 Antora 网站生成器实现,它提供了一种将自定义代码连接到生成器构建过程的方法。
Antora 的扩展工具是事件驱动型的,这意味着它通过发出事件来工作。生成器中的每个离散步骤完成后,以及在其他关键转换点,Antora 会发出一个命名事件(如 contentAggregated
)。事件由称为 "监听器" 的函数处理,监听器必须与事件一起注册。为了将您的代码与 Antora 的运行挂钩,您可以注册监听一个或多个事件的扩展。这些监听器在扩展的注册函数中定义。
事件的监听器可以是同步的,也可以是异步的,但都是按顺序同步调用的。事件监听器返回的任何值都将被忽略。事件的所有监听器运行完毕后,生成器将进入下一步。
简而言之,Antora 扩展注册监听器,以响应网站生成器引发的过渡事件。随后的页面将详细介绍如何设置侦听器、侦听器可以侦听哪些事件以及如何访问上下文变量。
生成器上下文
Antora 中的扩展设施松散地基于 Node.js 中的 EventEmitter。Antora 在此事件系统上使用了一个名为 GeneratorContext 的抽象概念,它针对此用例调整了 EventEmitter。
当生成器启动时,它会创建一个 GeneratorContext 的实例,称为 生成器上下文。然后,该对象会与每个扩展及其事件监听器绑定。生成器上下文负责跟踪事件侦听器、存储生成器函数、管理流经生成器的上下文变量、通知事件侦听器,并提供帮助程序,使编写扩展程序变得更容易。从字面上看,它就是生成器的执行上下文。
大多数情况下,你会与生成器上下文提供的 on
方法交互,将事件监听器绑定到事件上。您还可以使用生成器上下文提供自定义生成器函数。
什么是事件监听器?
事件监听器 是一个回调函数,在事件发生时被调用(即被通知)。这种回调机制提供了一种在生成器的任意两个离散步骤之间插入代码的方法。Antora 会等待事件监听器运行完成(即使是异步的)后再继续。
监听器可以修改生成器中范围内变量的状态、添加新变量或替换现有变量。更多的时候,监听器会向一个或多个目录中添加额外的文件,以供处理或发布。
同一事件的监听器会依次被调用,以防止相互干扰。
什么是生成器函数?
生成器函数是生成器执行的预定义离散步骤。虽然大多数扩展会监听生成器事件,但扩展也可以替换一个或多个生成器函数。当您想改变 Antora 的内置行为(例如导航的构建方式)时,就可以使用这种功能。与事件监听器一样,生成器函数也是在生成器上下文中配置的。要将自己的生成器函数与 Antora 的操作挂钩,您需要注册一个扩展,将这些函数分配给生成器上下文。
什么是上下文变量?
如果扩展无法访问生成器正在处理的任何配置、内容或其他数据,那么它就没有什么用处。这就是上下文变量的作用所在。
通过 上下文变量,可以访问在生成器中流动的范围内对象。这些变量存储在生成器上下文中,因此称为上下文变量。
监听器可以从生成器上下文中选取任何一个变量,并对其进行处理。事实上,监听器可以读取与生成器本身相同的变量。监听器还可以向上下文推送新变量或替换变量,只要这些变量没有被锁定。