tapable介绍 - SyncWaterfallHook
SyncWaterfallHook
上一个监听函数的返回值可以传给下一个监听函数
3.use.js
let {SyncWaterfallHook} = require('tapable') // 解构同步勾子
// waterfall 瀑布
class Lesson {
constructor () {
this.hooks = {
// 订阅勾子
arch: new SyncWaterfallHook(['name']),
}
}
start () {
// 发布
this.hooks.arch.call('may')
}
tap () { // 注册监听函数,订阅
this.hooks.arch.tap('node', function (name) {
console.log('node', name)
return '学的不错'
})
this.hooks.arch.tap('react', function (name) {
console.log('react', name)
})
}
}
let l = new Lesson()
l.tap(); //注册两个函数
l.start() // 启动勾子
3.theory.js
class SyncWaterfallHook { // 勾子是同步的 - 瀑布
constructor(args) { // args => ['name']
this.tasks = []
}
tap (name, task) {
this.tasks.push(task)
}
call (...args) {
let [first, ...others] = this.tasks;
let ret = first(...args)
others.reduce((a, b) => {
return b(a);
}, ret);
}
}
let hook = new SyncWaterfallHook(['name'])
hook.tap('react', function (name) {
console.log('react', name);
return 'react Ok'
// return undefined
})
hook.tap('node', function (name) {
console.log('node', name);
return 'node Ok'
})
hook.tap('webpack', function (data) {
console.log('webpack', data);
})
hook.call('jw')