Fancy Front End Fancy Front End
  • 开始上手
  • 基础
  • 调度器(Scheduler)
  • 更新器(Updater)
  • 渲染器(Render)
  • 更新周期
  • hooks 原理
  • 总结
  • 📙 React源码漂流记
  • 开始上手
  • 基础
  • reactivity
  • runtime-core
  • runtime-dom
  • Awesome Web
  • Awesome NodeJS
话题
  • 导航
  • Q&A
  • 幻灯片
  • 关于
  • 分类
  • 标签
  • 归档
博客 (opens new window)
GitHub (opens new window)

Jonsam NG

让有意义的事变得有意思,让有意思的事变得有意义
  • 开始上手
  • 基础
  • 调度器(Scheduler)
  • 更新器(Updater)
  • 渲染器(Render)
  • 更新周期
  • hooks 原理
  • 总结
  • 📙 React源码漂流记
  • 开始上手
  • 基础
  • reactivity
  • runtime-core
  • runtime-dom
  • Awesome Web
  • Awesome NodeJS
话题
  • 导航
  • Q&A
  • 幻灯片
  • 关于
  • 分类
  • 标签
  • 归档
博客 (opens new window)
GitHub (opens new window)
  • 开始上手
  • Plan 计划
  • typescript-utility

  • single-spa源码

  • qiankun源码

  • webpack

    • 开始阅读
    • tapable源码

      • 本章概要
      • Api概述
        • 目录
        • 概念
        • API 分类
        • API 概述
        • 参考
      • Hook
      • HookCodeFactory
    • init阶段

    • make阶段

    • 总结

  • axios

  • solid

  • vite源码

  • jquery源码

  • snabbdom

  • am-editor

  • html2canvas

  • express

  • acorn源码

  • immutable.js源码

  • web
  • webpack
  • tapable源码
jonsam
2022-04-20
目录

Api概述

本节内容主要探讨 tapable 中的一些概念,Hook 的分类,Hook API 初步认识等内容。本节内容将不涉及源代码。

# 目录

  • 目录
  • 概念
  • API 分类
  • API 概述
  • 参考

# 概念

在阅读本章内容中,如下的概念需要我们注意:

参数 描述
Hook、钩子 一个注册 callback 的注册中心,在 webpack 中表现为 new SyncHook()
Callback、hook、function、回调、tap (名词) 注册在 Hook 上的一个回调,在 webpack 中表现为 plugin
Tap(动词)、注册 “轻拍” 的意思,Callback 在 Hook 上注册的过程
Call、调用、执行 调用 Hook 上的 Callback 的过程

注意:这里舍弃了 发布 、 订阅 、 发布订阅中心 这样的术语,而是使用了 触发 、 注册 、 注册中心 的术语,目前是便于理解。

# API 分类

根据回调的行为变现不同,可以将 Hook 分成如下类型:

类型 官方释义 中文释义 备注
Basic hook (without “Waterfall”, “Bail” or “Loop” in its name) This hook simply calls every function it tapped in a row. 顺序调用被注册在 Hook 上的所有 Callback
Waterfall A waterfall hook also calls each tapped function in a row. Unlike the basic hook, it passes a return value from each function to the next function. 顺序执行 Hook 中的 Callback,将上一个 Callback 的返回值作为参数传递给下一个 Callback Waterfall 是 “瀑布” 的意思,表示顺序执行各种任务,前一个任务执行完了才会执行下一个回调,而前一个任务的执行结果会作为参数传给下一个任务。
Bail A bail hook allows exiting early. When any of the tapped function returns anything, the bail hook will stop executing the remaining ones. 允许提前退出,当任意一个 Callback 返回了结果,Hook 将不再执行后续的 Callback Bail 是 “保险,保障” 的意思,表示任意一个任务成功处理,就不再执行后续的任务。
Loop When a plugin in a loop hook returns a non-undefined value the hook will restart from the first plugin. It will loop until all plugins return undefined. 当 Hook 中某个 Callback 返回了 non-undefined 的值将从头开始重新执行直到所有的 Callback 都返回 undefined , Loop 是 “循环 “的意思,表示如果某个任务返回了非 undefined 的结果就从头重复执行此任务队列,直到所有任务返回 undefined 退出循环。

另外,根据回调是同步的还是异步的,可以将 Hook 分成如下类型:

类型 官方释义 中文释义 备注
Sync A sync hook can only be tapped with synchronous functions (using myHook.tap()). 同步的 Hook 只能注册同步的 Callback,使用 Hook.tap() 同步的
AsyncSeries An async-series hook can be tapped with synchronous, callback-based and promise-based functions (using myHook.tap(), myHook.tapAsync() and myHook.tapPromise()). They call each async method in a row. async-series 的 Hook 可以注册同步的 Callback、基于回调或者基于 Promise 的 Callback。使用 Hook.tap() 、 Hook.tapAsync() 、 Hook.tapPromise() 注册 Callback。 Series 是 “串行” 的意思,表示前一个任务执行完了才会执行下一个任务。
AsyncParallel An async-parallel hook can also be tapped with synchronous, callback-based and promise-based functions (using myHook.tap(), myHook.tapAsync() and myHook.tapPromise()). However, they run each async method in parallel. async-parallel 的 Hook 也可以注册基于回调或者基于 Promise 的 Callback。使用 Hook.tap() 、 Hook.tapAsync() 、 Hook.tapPromise() 注册 Callback。但是,所有异步的 Callback 将会并行执行。 Parallel 是 “并行” 的意思,有点类似于 Promise.all,表示这些回调同时并行执行。

AsyncSeries 和 AsyncParallel 只针对异步的 Hook,同步的 Hook 永远都是串行执行的。

# API 概述

  • SyncHook
  • SyncBailHook
  • SyncWaterfallHook
  • SyncLoopHook
  • AsyncParallelHook
  • AsyncParallelBailHook
  • AsyncSeriesHook
  • AsyncSeriesBailHook
  • AsyncSeriesLoopHook
  • AsyncSeriesWaterfallHook
  • HookMap
  • MultiHook

# 参考

  • webpack/tapable: Just a little module for plugins. (opens new window)
编辑 (opens new window)
上次更新: 2022/09/06, 14:25:16
本章概要
Hook

← 本章概要 Hook→

最近更新
01
渲染原理之组件结构与 JSX 编译
09-07
02
计划跟踪
09-06
03
开始上手
09-06
更多文章>
Theme by Vdoing | Copyright © 2022-2022 Fancy Front End | Made by Jonsam by ❤
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式