开发过webpack plugin 的同学应该都知道,这里仅做笔记分享了
阅读前最好对tapable先简单了解下;
其实不管是 compiler还是 compilation
类型
同步钩子
- SyncBailHook 执行过程中注册的回调返回非 undefined 时就停止不在执行。
- SyncHook 钩子
- SyncWaterfallHook 接受至少一个参数,上一个注册的回调返回值会作为下一个注册的回调的参数。
- SyncLoopHook 有点类似 SyncBailHook,但是是在执行过程中回调返回非 undefined 时继续再次执行当前的回调。
同步钩子一般可以
compiler.hook.tap('name', (name)=>{
/*body*/
})
异步钩子
- AsyncParallelHook
AsyncParallelHook 顾名思义是并行执行的异步钩子,当注册的所有异步回调都并行执行完毕之后再执行 callAsync 或者 promise 中的函数。 - AsyncSeriesHook 保证顺序执行
如果你想要顺序的执行异步函数的话,显然 AsyncParallelHook 是不适合的。所以 tapable 提供了另外一个基础的异步钩子:AsyncSeriesHook。
compiler.hook.tapAsync('name', (name, cb)=>{ setTimeout(cb,1000)});
compiler.hook.tapPromise('name', ()=>{ return new Promise()});