27_wbpack_自定义Plugin
Tapable
要想学会自定义Plugin就要先了解Tapable这个库
在我们的wbpack中有两个非常重要的两个类Compiler和Compilation
他们是通过注入插件的方式,来监听webpack 的所有生命周期
在他们的示例中有很多个hooks,而hooks其实是创建了Tapable库中的各种Hook的实例
Tapable有哪些Hook呢?
同步:Sync
- SyncHook
- SyncBailHook
- SyncWaterfallHook
- SyncLoopHook
异步:Async
- Paralle(并行)
- AsyncParallelHook
- AsyncParallelBailHook
- Serise(串行)
- AsyncSeriesHook
- AsyncSeriesBailHook
- AsyncSeriesWaterfallHook
同步和异步的
- 以sync开头的,是同步的Hook
- 以async开头的,两个事件处理回调,不会等待上一次处理回调结束后再执行下一次回调
类别
- bail:当有返回值时,就不会执行后续的事件触发了
- Loop:当返回值为true,就会反复执行该事件,当返回值为undefin或者不返回内容,就退出事件
- Waterfall:当返回值不为undefined时,会将这次返回结果作为下次事件的第一个参数
- Parallel:并行,会同时执行次事件处理回调结束,才执行下一次事件处理回调
- Series:串行,会等待上一是异步的Hook
自定义Plugin
在我们的webpack中有很多的生命周期,我们的插件需要注册到webpack的生命周期当中,那么是如何注册的呢?
- 在webpack函数的createCompiler方法中注册了所有的插件
- 在注册插件的时候会调用插件函数或者插件对象的apply方法
- 插件方法会接收compiler或者compilation对象,我们可以通过compiler或者compilation对象来注册Hook的事件