const {SyncHook,SyncBailHook,AsyncParallelHook,AsyncSeriesHook} =require('tapable')
// 同步
// SyncHook 同步执行,任务会一次执行
// SyncBailHook 一旦有返回就会退出
// 异步hooks
// AsyncParallelHook 异步并行
// AsyncSeriesHook 异步串行
class Lesson{
constructor(){
// 初始化hooks容器
this.hooks={
go:new SyncHook(['address']),
// go:new SyncBailHook(['address'])
// leave:new AsyncParallelHook(['name','age']),
leave:new AsyncSeriesHook(['name','age'])
}
}
tap(){
// 往hoos容器中注册事件/添加回调函数
this.hooks.go.tap('class3318',(address)=>{
console.log('class3318',address)
return 123;
})
this.hooks.go.tap('class3319',(address)=>{
console.log('class3319',address)
})
// 异步钩子第一种写法
this.hooks.leave.tapAsync('class222',(name,age,cb)=>{
setTimeout(() => {
console.log('class222',name,age)
cb()
}, 1000);
})
// 异步钩子第二种写法
this.hooks.leave.tapPromise('class333',(name,age)=>{
return new Promise(resolve=>{
setTimeout(() => {
console.log('class333',name,age)
resolve()
}, 1000);
})
})
}
start(){
// 触发hooks
this.hooks.go.call('c3318')
this.hooks.leave.callAsync('jack',18,function(){
// 代表所有leave容器中的函数触发完了,才触发
console.log('end---')
})
}
}
const tap=new Lesson();
tap.tap();
tap.start()
webpack taptable钩子
最新推荐文章于 2024-07-03 07:45:00 发布