惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LangChain Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
雷峰网
雷峰网
量子位
V
V2EX
S
SegmentFault 最新的问题
月光博客
月光博客
博客园 - 【当耐特】
Hugging Face - Blog
Hugging Face - Blog
V
Visual Studio Blog
大猫的无限游戏
大猫的无限游戏
T
Tailwind CSS Blog
博客园_首页
博客园 - Franky
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
美团技术团队
Y
Y Combinator Blog
The Cloudflare Blog
C
Check Point Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
腾讯CDC
B
Blog
Stack Overflow Blog
Stack Overflow Blog
P
Proofpoint News Feed

6Jyc5p+a

【笔记】HermesAgent学习笔记 【笔记】DeepSeekHarness学习笔记 【笔记】Rollup的PluginBabel插件 【笔记】Rollup学习笔记 【笔记】Gulp的BrowserSync插件 【笔记】Node-SSH学习笔记 【笔记】Highlight.js学习笔记 【笔记】Marked学习笔记 【笔记】Webpack通过schema-utils实现Loader参数校验 【笔记】Webpack实现TreeShaking 【笔记】Webpack的WebpackBundleAnalyzer插件 【代码】校验信用卡号码 【笔记】Webpack的SpeedMesureWebpackPlugin插件 【笔记】Codex配置Brave浏览器的MCP 【笔记】Webpack的CSSMinimizerWebpackPlugin插件 【笔记】FastNodeManager学习笔记 【笔记】Terser学习笔记 【笔记】Codex配置Wireshark的MCP 【笔记】Codex配置Unity的MCP 【笔记】Codex配置Blender的MCP 【笔记】Codex配置IDEA的MCP 【笔记】Browserslist学习笔记 【笔记】Codex学习笔记 【笔记】MicrosoftStore微软商店学习笔记 【笔记】通过NapCat和AstrBot实现QQ机器人 【笔记】部署NapCat 【笔记】部署AstrBot 【笔记】Poetry学习笔记 【笔记】uv学习笔记 【笔记】Nodejs通过mysql2操作MySQL数据库
【笔记】Tapable学习笔记
57uv6Z6g · 2026-08-12 · via 6Jyc5p+a

前言

Just a little module for plugins.(Github

下载依赖

1
npm install tapable

同步钩子

SyncHook同步基础钩子

  • 所有事件函数同步串行执行,返回值会被丢弃
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const { SyncHook } = require("tapable");

class Plugin {
constructor() {
this.hooks = {
key: new SyncHook(["payload"]),
};

this.hooks.key.tap("<event_name>", (payload) => {
console.log(payload);
});

this.hooks.key.tap("<event_name>", (payload) => {
console.log(payload);
});
}
}

module.exports = Plugin;
1
2
3
const Plugin = require("./Plugin");

new Plugin().hooks.key.call("<payload>");

SyncBailHook同步熔断钩子

  • 所有事件函数同步串行执行,任意事件函数返回值不为undefined则终止整个钩子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
const { SyncBailHook } = require("tapable");

class Plugin {
constructor() {
this.hooks = {
key: new SyncBailHook(["payload"]),
};

this.hooks.key.tap("<event_name>", (payload) => {
console.log(payload);
return null;
});

this.hooks.key.tap("<event_name>", (payload) => {

});
}
}

module.exports = Plugin;
1
2
3
const Plugin = require("./Plugin");

new Plugin().hooks.key.call("<payload>");

SyncLoopHook同步循环钩子

  • 所有事件函数同步串行执行,任意事件函数返回值为true则重新执行整个钩子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const { SyncBailHook } = require("tapable");

class Plugin {
constructor() {
this.hooks = {
key: new SyncBailHook(["payload"]),
};

this.hooks.key.tap("<event_name>", (payload) => {
console.log(payload);
});
}
}

module.exports = Plugin;
1
2
3
const Plugin = require("./Plugin");

new Plugin().hooks.key.call("<payload>");

AsyncWaterfallHook同步瀑布钩子

  • 所有事件函数同步串行执行,任意事件函数返回值不为undefined则将返回值传递给下一个事件,作为下一个事件的第一个参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
const { AsyncWaterfallHook } = require("tapable");

class Plugin {
constructor() {
this.hooks = {
key: new AsyncWaterfallHook(["payload"]),
};

this.hooks.key.tap("<event_name>", (payload) => {
console.log(payload);
return null;
});

this.hooks.key.tap("<event_name>", (payload) => {
console.log(payload);
});
}
}

module.exports = Plugin;
1
2
3
const Plugin = require("./Plugin");

new Plugin().hooks.key.call("<payload>");

异步钩子

AsyncParallelHook异步并行钩子

  • 所有事件函数异步并行执行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const { AsyncParallelHook } = require("tapable");

class Plugin {
constructor() {
this.hooks = {
key: new AsyncParallelHook(["payload"]),
};

this.hooks.key.tapAsync("<event_name>", (payload) => {
console.log(payload);
});

this.hooks.key.tapAsync("<event_name>", (payload) => {
console.log(payload);
});
}
}

module.exports = Plugin;
1
2
3
const Plugin = require("./Plugin");

new Plugin().hooks.key.callAsync("<payload>");

AsyncSeriesHook

  • 所有事件函数异步串行执行,上一个事件函数执行了callback()下一个事件函数才会执行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const { AsyncSeriesHook } = require("tapable");

class Plugin {
constructor() {
this.hooks = {
key: new AsyncSeriesHook(["payload"]),
};

this.hooks.key.tapAsync("<event_name>", (payload, callback) => {
console.log(payload);
callback();
});

this.hooks.key.tapAsync("<event_name>", (payload, callback) => {
console.log(payload);
callback();
});
}
}

module.exports = Plugin;
1
2
3
4
5
const Plugin = require("./Plugin");

new Plugin().hooks.key.callAsync("<payload>", function () {
console.log("done");
});

完成