跳到主要内容

认识

2024年04月06日
柏拉文
越努力,越幸运

一、认识


tapable 提供了一系列事件的发布订阅 API ,通过 Tapable 我们可以注册事件,从而在不同时机去触发注册的事件进行执行。

二、同步异步


Tapable 中所有注册的事件可以分为同步异步两种执行方式,正如名称表述的那样:

  • 同步表示注册的事件函数会同步进行执行: 同步钩子 tap 方法是唯一的注册事件的方法,通过 call 方法触发同步钩子的执行。

  • 异步表示注册的事件函数会异步进行执行: 异步钩子可以通过 taptapAsynctapPromise三种方式来注册,同时可以通过对应的 callcallAsyncpromise 三种方式来触发注册的函数。同时异步钩子可以分为:

    • 异步串行钩子( AsyncSeries ): 可以被串联(连续按照顺序调用)执行的异步钩子函数

    • 异步并行钩子( AsyncParallel ): 可以被并联(并发调用)执行的异步钩子函数

Preview

三、执行机制


Tapable 可以按照异步/同步执行分类的同时也可以按照执行机制进行分类,比如:

3.1 Basic Hook

Basic Hook 基本类型的钩子,它仅仅执行钩子注册的事件,并不关心每个被调用的事件函数返回值如何。

Preview

3.2 Waterfall Hook

Waterfall Hook 瀑布类型的钩子,瀑布类型的钩子和基本类型的钩子基本类似,唯一不同的是瀑布类型的钩子会在注册的事件执行时将事件函数执行非 undefined 的返回值传递给接下来的事件函数作为参数。

Preview

3.3 Bail Hook

Bail Hook 保险类型钩子,保险类型钩子在基础类型钩子上增加了一种保险机制,如果任意一个注册函数执行返回非 undefined 的值,那么整个钩子执行过程会立即中断,之后注册事件函数就不会被调用了。

Preview

3.4 Loop Hook

Loop Hook 循环类型钩子,循环类型钩子稍微比较复杂一点。循环类型钩子通过 call 调用时,如果任意一个注册的事件函数返回值非 undefined ,那么会立即重头开始重新执行所有的注册事件函数,直到所有被注册的事件函数都返回 undefined

Preview