最近在学习webpack源码,发现webpack库内部使用了一个tapable流程和管理工具,来实现了webpack的插件机制
内部支持9种类型的执行hook
const {
SyncHook,
SyncBailHook,
SyncWaterfallHook,
SyncLoopHook,
AsyncParallelHook,
AsyncParallelBailHook,
AsyncSeriesHook,
AsyncSeriesBailHook,
AsyncSeriesWaterfallHook
} = require("tapable");
hook 类型
Basic hook: 这种类型的hook,当被tapped的时候,只是简单的调用每个函数
water fall:线性的执行每一个函数,从一个函数的返回值最为下一个执行函数的参数
Bail hook: 准许提前退出,当被执行的函数,返回任何值,bail hook 将退出,不在执行余下的钩子
loop hook:
sync 同步执行
asyncseries 异步串行 可以使用callback 或者 promise 使用 myhook.tap() myhook.tapAsync() myhook,tapPromise() 线性执行异步函数
asyncparallel 异步并行 一样可以被使用同步 callback promise 触发,他们并行执行每个方法
image.png
。