Api概述
本节内容主要探讨 tapable 中的一些概念,Hook 的分类,Hook API 初步认识等内容。本节内容将不涉及源代码。
# 目录
# 概念
在阅读本章内容中,如下的概念需要我们注意:
参数 | 描述 |
---|---|
Hook、钩子 | 一个注册 callback 的注册中心,在 webpack 中表现为 new SyncHook() |
Callback、hook、function、回调、tap (名词) | 注册在 Hook 上的一个回调,在 webpack 中表现为 plugin |
Tap(动词)、注册 | “轻拍” 的意思,Callback 在 Hook 上注册的过程 |
Call、调用、执行 | 调用 Hook 上的 Callback 的过程 |
注意:这里舍弃了 发布
、 订阅
、 发布订阅中心
这样的术语,而是使用了 触发
、 注册
、 注册中心
的术语,目前是便于理解。
# API 分类
根据回调的行为变现不同,可以将 Hook 分成如下类型:
类型 | 官方释义 | 中文释义 | 备注 |
---|---|---|---|
Basic hook (without “Waterfall”, “Bail” or “Loop” in its name) | This hook simply calls every function it tapped in a row. | 顺序调用被注册在 Hook 上的所有 Callback | |
Waterfall | A waterfall hook also calls each tapped function in a row. Unlike the basic hook, it passes a return value from each function to the next function. | 顺序执行 Hook 中的 Callback,将上一个 Callback 的返回值作为参数传递给下一个 Callback | Waterfall 是 “瀑布” 的意思,表示顺序执行各种任务,前一个任务执行完了才会执行下一个回调,而前一个任务的执行结果会作为参数传给下一个任务。 |
Bail | A bail hook allows exiting early. When any of the tapped function returns anything, the bail hook will stop executing the remaining ones. | 允许提前退出,当任意一个 Callback 返回了结果,Hook 将不再执行后续的 Callback | Bail 是 “保险,保障” 的意思,表示任意一个任务成功处理,就不再执行后续的任务。 |
Loop | When a plugin in a loop hook returns a non-undefined value the hook will restart from the first plugin. It will loop until all plugins return undefined. | 当 Hook 中某个 Callback 返回了 non-undefined 的值将从头开始重新执行直到所有的 Callback 都返回 undefined , | Loop 是 “循环 “的意思,表示如果某个任务返回了非 undefined 的结果就从头重复执行此任务队列,直到所有任务返回 undefined 退出循环。 |
另外,根据回调是同步的还是异步的,可以将 Hook 分成如下类型:
类型 | 官方释义 | 中文释义 | 备注 |
---|---|---|---|
Sync | A sync hook can only be tapped with synchronous functions (using myHook.tap()). | 同步的 Hook 只能注册同步的 Callback,使用 Hook.tap() | 同步的 |
AsyncSeries | An async-series hook can be tapped with synchronous, callback-based and promise-based functions (using myHook.tap(), myHook.tapAsync() and myHook.tapPromise()). They call each async method in a row. | async-series 的 Hook 可以注册同步的 Callback、基于回调或者基于 Promise 的 Callback。使用 Hook.tap() 、 Hook.tapAsync() 、 Hook.tapPromise() 注册 Callback。 | Series 是 “串行” 的意思,表示前一个任务执行完了才会执行下一个任务。 |
AsyncParallel | An async-parallel hook can also be tapped with synchronous, callback-based and promise-based functions (using myHook.tap(), myHook.tapAsync() and myHook.tapPromise()). However, they run each async method in parallel. | async-parallel 的 Hook 也可以注册基于回调或者基于 Promise 的 Callback。使用 Hook.tap() 、 Hook.tapAsync() 、 Hook.tapPromise() 注册 Callback。但是,所有异步的 Callback 将会并行执行。 | Parallel 是 “并行” 的意思,有点类似于 Promise.all,表示这些回调同时并行执行。 |
AsyncSeries
和 AsyncParallel
只针对异步的 Hook,同步的 Hook 永远都是串行执行的。
# API 概述
- SyncHook
- SyncBailHook
- SyncWaterfallHook
- SyncLoopHook
- AsyncParallelHook
- AsyncParallelBailHook
- AsyncSeriesHook
- AsyncSeriesBailHook
- AsyncSeriesLoopHook
- AsyncSeriesWaterfallHook
- HookMap
- MultiHook
# 参考
编辑 (opens new window)
上次更新: 2022/09/06, 14:25:16