本章概要
webpack 核心代码只是提供 options、compilation、module、loader-runner(使用 loader-runner 包)、JavascriptParser(使用 acorn 包) 等模块的功能,但是其强大的功能还得得益于其强大的 loader 机制和 plugin 机制,这使得 webpack 拥有功能丰富的生态。
本章内容探讨 webpack 插件机制的核心包,tapable 的原理。
# 什么是 tapable?
Tapable 是由 webpack 项目维护的,在 webpack 插件机制中起到重要作用的核心包,它使用 发布订阅模式
实现强大的 Hook 机制。
# 什么是发布订阅模式?
::: rem MDN:Publish–subscribe pattern In software architecture, publish–subscribe is a messaging pattern where senders of messages, called publishers, do not program the messages to be sent directly to specific receivers, called subscribers, but instead categorize published messages into classes without knowledge of which subscribers, if any, there may be. Similarly, subscribers express interest in one or more classes and only receive messages that are of interest, without knowledge of which publishers, if any, there are. :::
发布订阅模式有如下几个特点:
- 发布者不直接将消息发送给订阅者。
- 发布者发送消息而不关心订阅者是谁。
- 订阅者接受消息而不关心发布者是谁。
参考:
发布订阅的应用案例:
- Redux 中的 subscribe 和 dispatch。
- Vue 响应式原理中 effects、track 和 trigger。
- Node.js 中的 EventEmitter 模块实现的发布订阅。