Tapable

要想学会自定义Plugin就要先了解Tapable这个库

在我们的wbpack中有两个非常重要的两个类Compiler和Compilation

他们是通过注入插件的方式,来监听webpack 的所有生命周期

在他们的示例中有很多个hooks,而hooks其实是创建了Tapable库中的各种Hook的实例

Tapable有哪些Hook呢?

同步:Sync

  • SyncHook
  • SyncBailHook
  • SyncWaterfallHook
  • SyncLoopHook

异步:Async

  • Paralle(并行)

    • AsyncParallelHook
    • AsyncParallelBailHook
  • Serise(串行)
    • AsyncSeriesHook
    • AsyncSeriesBailHook
    • AsyncSeriesWaterfallHook

同步和异步的

  • 以sync开头的,是同步的Hook
  • 以async开头的,两个事件处理回调,不会等待上一次处理回调结束后再执行下一次回调

类别

  • bail:当有返回值时,就不会执行后续的事件触发了
  • Loop:当返回值为true,就会反复执行该事件,当返回值为undefin或者不返回内容,就退出事件
  • Waterfall:当返回值不为undefined时,会将这次返回结果作为下次事件的第一个参数
  • Parallel:并行,会同时执行次事件处理回调结束,才执行下一次事件处理回调
  • Series:串行,会等待上一是异步的Hook

自定义Plugin

在我们的webpack中有很多的生命周期,我们的插件需要注册到webpack的生命周期当中,那么是如何注册的呢?

  • 在webpack函数的createCompiler方法中注册了所有的插件
  • 在注册插件的时候会调用插件函数或者插件对象的apply方法
  • 插件方法会接收compiler或者compilation对象,我们可以通过compiler或者compilation对象来注册Hook的事件

27_wbpack_自定义Plugin的更多相关文章

  1. Gradle学习系列之十——自定义Plugin(本系列完)

    在本系列的上篇文章中,我们讲到了如何自定义Task类型,在本篇文章中,我们将讲到如何自定义Plugin. 请通过以下方式下载本系列文章的Github示例代码: git clone https://gi ...

  2. vue---vue2.x自定义plugin,给vue添加全局方法,原型上增加全局方法

    1. 自定义plugin.js export default{ install(Vue,options); { Vue.prototype.toStringTwo=(str)=>( ('0000 ...

  3. cordova 自定义 plugin

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_30879415/article/details/81265455准备工作安装cordovanp ...

  4. Gradle学习系列之九——自定义Task类型

    在本系列的上篇文章中,我们学习了多Project构建,在本篇文章中,我们将学到如何自定义Task类型. 请通过以下方式下载本系列文章的Github示例代码: git clone https://git ...

  5. MyBatis之简单了解Plugin

    MyBatis的Configuration配置中有一个Plugin配置,根据其名可以解释为"插件",这个插件实质可以理解为"拦截器"."拦截器&quo ...

  6. webpack 快速入门 系列 - 自定义 wepack 上

    其他章节请看: webpack 快速入门 系列 自定义 wepack 上 通过"初步认识webpack"和"实战一"这 2 篇文章,我们已经学习了 webpac ...

  7. 深入浅出Mybatis系列(六)---objectFactory、plugins、mappers简介与配置

    上篇文章<深入浅出Mybatis系列(五)---TypeHandler简介及配置(mybatis源码篇)>简单看了一下TypeHandler, 本次将结束对于mybatis的配置文件的学习 ...

  8. (转)android平台phonegap框架实现原理

    (原文)http://blog.csdn.net/wuruixn/article/details/7405175 android平台phonegap框架实现原理 分类: Android2012-03- ...

  9. Gradle学习系列之一——Gradle快速入门

    这是一个关于Gradle的学习系列,其中包含以下文章: Gradle快速入门 创建Task的多种方法 读懂Gradle语法 增量式构建 自定义Property 使用java Plugin 依赖管理 构 ...

  10. PhoneGap原理分析

    PhoneGap提供了Native Api的支持(如:重力感应.相机.联系人.文件.地址位置…), 比如要用js获取本机的联系人,可以用: var options = new ContactFindO ...

随机推荐

  1. js 全屏代码实现方法

    1 /* 全屏方法 2 * ========= 3 <button class="roll-nav roll-right fullscreen"> 4 <i cl ...

  2. springboot如何在拦截器中拦截post请求参数以及解决文件类型上传问题

      我们经常有这样一个场景,比如:在springboot拦截器中想截取post请求的body参数做一些中间处理,或者用到自定义注解,想拦截一些特定post请求的方法的参数,记录一些请求日志. 想到了使 ...

  3. 安卓逆向 IDA 静态调试分析

    1.找到我们分析的接口 2.F5进入C伪代码 修正一下参数,IDA无法正常识别 jstring __fastcall Java_com_example_sfs_MainActivity_getText ...

  4. 加密,各种加密,耙梳加密算法(Encryption)种类以及开发场景中的运用(Python3.10)

    不用说火爆一时,全网热议的Web3.0区块链技术,也不必说诸如微信支付.支付宝支付等人们几乎每天都要使用的线上支付业务,单是一个简简单单的注册/登录功能,也和加密技术脱不了干系,本次我们耙梳各种经典的 ...

  5. vue开发大屏项目屏幕适配问题解决方案

    1.新建自定义指令文件如下: 2.文件中插入一下代码: import { App, Directive, DirectiveBinding, nextTick } from 'vue' import ...

  6. 深入理解跳表及其在Redis中的应用

    前言 跳表可以达到和红黑树一样的时间复杂度 O(logN),且实现简单,Redis 中的有序集合对象的底层数据结构就使用了跳表.其作者威廉·普评价:跳跃链表是在很多应用中有可能替代平衡树的一种数据结构 ...

  7. Cobaltstrike —— shellcode分析(一)

    前言 搞iot搞久了,换个方向看看,改改口味. windows 常见结构体 在分析Cobaltstrike-shellcode之前我们得先了解一下windows下一些常见的结构体. X86 Threa ...

  8. VUE子组件使用父组件值并赋值

    子组件使用父组件值,要改变使用用赋值方法,定义新变量: 定义新变量:copyTrendObj 此时copyTrendObj 可以被赋值 props: { trendObj: { type: Objec ...

  9. let 和 var 的区别

    var 关键字 在块级作用域中使用var声明变量,外面同级的块级作用域也可以访问.if.switch.for 等语句的作用域都没有块级作用域,所以说,在这些语句中声明的变量都能被外界访问,这是非常不安 ...

  10. pat乙级1022 D进制的A+B

    #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #de ...