tapable
核心原理:发布订阅模式。
webpack本质上是一种事件流的机制,它的工作流程就是将各个插件串联起来,而实现这一切的核心就是Tapable。Tapable其实就是一个用于事件发布订阅执行的插件架构。
同步
SyncHook
同步钩子,能够同步执行注册的监听函数
使用
1 | let {SyncHook} = require('tapable'); |
原理实现
1 | class SyncHook { |
SyncBailHook
SyncBailHook同步熔断保险钩子,即return一个非undefined的值,则不再继续执行后面的监听函数
使用
1 | let {SyncBailHook} = require('tapable'); |
原理实现
1 | class SyncBailHook { |
SyncWaterfallHook
SyncWaterfallHook 同步瀑布钩子,上一个监听函数的返回值会传递给下一个监听函数
使用
1 | let {SyncWaterfallHook} = require('tapable'); |
原理实现
1 | class SyncWaterfallHook { |
SyncLoopHook
SyncLoopHook,同步遇到某个不返回undefined的监听函数,就重复执行
使用
1 | let {SyncLoopHook} = require('tapable'); |
原理实现
1 | class SyncLoopHook { |
异步并行
AsyncParallelHook
异步并行
普通异步方法
使用tapAsync注册(每个注册方法都有一个回调函数),使用callAsync调用
使用
1 | let {AsyncParallelHook} = require('tapable'); |
原理实现
1 | class AsyncParallelHook { |
Promise方法
使用tapPromise注册,promise调用
使用
1 | let {AsyncParallelHook} = require('tapable'); |
原理实现
1 | class AsyncParallelHook { |
AsyncParallelBailHook
带保险的异步并发
异步串行
AsyncSeriesHook
异步串行
普通方法
使用
1 | let {AsyncSeriesHook} = require('tapable'); |
原理实现
1 | class AsyncSeriesHook { |
Promise方法
使用
1 | let {AsyncSeriesHook} = require('tapable'); |
原理实现
1 | class AsyncSeriesHook { |
AsyncSeriesBailHook
带保险的异步串行
AsyncSeriesWaterfallHook
异步瀑布钩子,上一个监听函数的返回值会传递给下一个监听函数
Promise 用法
使用
1 | let {AsyncSeriesWaterfallHook} = require('tapable'); |
原理实现
1 | let {AsyncSeriesWaterfallHook} = require('tapable'); |