首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Webpack 源码(一)—— Tapable 和 事件流

1、Tapable Tap 的英文单词解释,除了最常用的 点击 手势之外,还有一个意思是 水龙头 —— 在 webpack 中指的是后一种; Webpack 可以认为是一种基于事件流的编程范例,内部的工作流程都是基于...插件 机制串接起来; 而将这些插件粘合起来的就是webpack自己写的基础类 Tapable 是,plugin方法就是该类暴露出来的; 后面我们将看到核心的对象 Compiler、Compilation...plugins 接下来我们简单节选几个函数分析一下: 1.1、apply 方法 该方法最普通也是最常用的,看一下它的定义: Tapable.prototype.apply = function apply...插件 对象,因此必然也存在 apply 方法;(Webpack 的插件就是Tapable对象,因此必须要提供 apply 方法 ) 只是更改上下文为当前 this 因此当前这里最大的作用就是传入当前...总结一下 2、Webpack 中的事件流 既然 Webpack 是基于 Tapable 搭建起来的,那么我们看一下 Webpack 构建一个模块的基本事件流是如何的; 我们在 Webpack 库中的 Tapable.js

76510

聊聊 Webpack 插件系统的关键实现 Tapable

蛋先生:今天就来聊下 webpack 中插件系统实现的关键 - Tapable 丹尼尔:Tapable? 蛋先生:没错,咱们今天换种方式来聊吧,就聊你的一天 丹尼尔:我的一天?...用 Tapable 的方式描述是以下这个样子: const { SyncHook } = require("tapable"); class Man { constructor() { this.hooks...接下来我们继续通过你的一天来了解 Tapable 的各种 Hook 及其它信息吧 --- 丹尼尔:好的,早上聊完了,中午干啥呢? 蛋先生:不不,还是早上。...那我岂不是要饿肚子了 X﹏X 蛋先生:做早餐完成不了,意味着吃早餐需要中断,这个时候就需要 SyncBailHook const { SyncBailHook } = require("tapable"...但我们需要把做早餐的成果给到吃早餐,这样吃早餐才有东西可以吃,这时就可以用 SyncWaterfallHook const { SyncWaterfallHook } = require("tapable

55320

webpack4.0各个击破(8)—— tapable

一. tapable概述 tapable地址:【tapable-0.2】 tapable是webpack的核心框架(4.0以上版本的API已经发生了变化),是一个基于事件流的框架,或者叫做发布订阅模式,...二. tapable-0.2源码解析 2.1 代码结构 //类定义 function Tapable() { this....2.2 事件监听方法 tapable通过原型方法Tapable.prototype.plugin来注册事件监听。 ?...其逻辑就是将回调函数按照事件名称进行归类存储,在tapable实例中统一调度管理。 //__plugin属性上挂载了各个注册事件的回调函数 tapable....三. tapable1.0概述 tapable地址:【tapable-1.0】 tapable在1.0版本做了很大改进,使用ES6语法重写了整个框架,除了更换了API外,在插件定义方面进行了明显升级,原来只通过

50830

2. webpack构建的基石: tapable@1.1.3源码分析

2. webpack构建的基石: tapable@1.1.3源码分析 3. webpack构建整体流程的组织:webpack -> Compiler -> Compilation 4....这个能力是由tapable提供的。 tapable是webpack中插件能运行的基石,是webpack与开发者交流的话筒,增强了webpack基础功能。...tapable是什么 介绍tapable之前,先说下发布-订阅,关于发布订阅,维基百科的解释如下: 在软件架构中,发布-订阅是一种消息范式,消息的发送者(称为发布者)不会将消息直接发送给特定的接收者(...所以:tapable是一种基于发布-订阅的消息范式,但是由于webpack构建场景比较复杂,因此相较于普通版的发布订阅类库其提供了很多增强特性。...tapable 提供多种hook,每个hook提供的能力都不一样。

40020

Webpack 插件架构深度讲解

本文大部分篇幅都 focus 在 Tapable 框架,详细枚举了 Tapable 提供的钩子及各类型钩子的特点、运行逻辑、实现原理,并进一步讨论 Tapable 框架在 webpack 的作用,进而揭示...本文将围绕 Tapable 展开,深入讲解 Tapable 的钩子类型、特点、分别以什么逻辑处理回调,在此基础上进一步推导出 什么是插件 从形态上看,插件通常是一个带有 apply 函数的类: class...Webpack 的插件体系基于 tapable 提供的各类钩子展开,所以有必要先熟悉一下 tapable 提供的钩子类型及各自的特点。...Tapable 全解析 Tapable 是 Webpack 插件架构的核心支架,但它的源码量其实很少,本质上就是围绕着 订阅/发布 模式叠加各种特化逻辑,适配 webpack 体系下复杂的事件源-处理器之间交互需求...A"); }); sleep.call(); 调用 sleep.call 时,tapable 内部处理流程大致为: 编译过程主要涉及三个实体: tapable/lib/SyncHook.js :定义

1.6K20

webpack-插件机制杂记 系列文章前言Tapablecompilecompilation编写一个插件compiler和compilation一些比较重要的事件钩子总结引用

Tapable Webpack的插件机制依赖于一个核心的库, Tapable。 在深入webpack的插件机制之前,需要对该核心库有一定的了解。...Tapable是什么 tapable 是一个类似于nodejs 的EventEmitter 的库, 主要是控制钩子函数的发布与订阅。...Tapable的使用 (该小段内容引用文章) 基本使用: const { SyncHook } = require('tapable') // 创建一个同步 Hook,指定参数 const hook...同样的,由于对串行性有依赖,所以只有 SyncLoopHook 和 AsyncSeriseLoopHook (PS:暂时没看到具体使用 Case) Tapable的源码分析 Tapable 基本逻辑是,...引用 不满足于只会使用系列: tapable webpack系列之二Tapable 编写一个插件 Compiler Compilation compiler和comnpilation钩子 看清楚真正的

1.2K20

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券