网站建设最新资讯上海网络营销上海网络推广

news/2025/10/2 5:12:04/文章来源:
网站建设最新资讯,上海网络营销上海网络推广,erp是什么意思,wordpress 概要文章目录 由浅入深学习TapableTapable是什么Tapable的Hook分类同步和异步的 使用Sync*同步类型钩子基本使用bailLoopWaterfall Async*异步类型钩子ParallelSeries 由浅入深学习Tapable webpack有两个非常重要的类#xff1a;Compiler和Compilation。他们通过注入插件的方式Compiler和Compilation。他们通过注入插件的方式来监听webpack的所有生命周期插件的注入离不开各种各样的Hook而他们的Hook是如何得到的呢其实是创建了Tapable库中各种Hook的实例。 Tapable是什么 Tapable是一个任务调度库它的核心思基于发布订阅模式是将任务执行逻辑和调度逻辑分离Tapable在webpack中用于plugin的管理在可以实现复杂调度逻辑的同时尽可能保证可维护性。 Tapable的机制与Event类似它可以用来定义各种各样的钩子相当于Event中的事件注册但是与Event不同的是Event中各个事件之间相互不关联互不影响但是tapable注册的事件之间可以是有关系的这种关系通过Tapable定义的各个钩子类来实现。其实Tapable的核心就是这些钩子类。因此我们接下来的重点就是讲述这些钩子类并实现它们。 Tapable的Hook分类 同步和异步的 以sync开头的是同步的Hook以async开头的两个事件处理回调不会等待上一次处理回调结束后再执行下一次回调 使用 Tapable的每个子类都是一个用于注册和触发事件的钩子我们可以查看一下SyncHook实例身上有哪些属性找到它注册事件和触发事件的属性。 SyncHook {_args: [],name: undefined,taps: [],interceptors: [],_call: [Function: CALL_DELEGATE],call: [Function: CALL_DELEGATE], // 用于触发同步事件的钩子_callAsync: [Function: CALL_ASYNC_DELEGATE],callAsync: [Function: CALL_ASYNC_DELEGATE], // 用于触发异步事件的钩子_promise: [Function: PROMISE_DELEGATE],promise: [Function: PROMISE_DELEGATE],_x: undefined,compile: [Function: COMPILE],tap: [Function: tap], // 用于注册同步事件的钩子tapAsync: [Function: TAP_ASYNC], // 用于注册异步事件的钩子tapPromise: [Function: TAP_PROMISE],constructor: [Function: SyncHook] }Sync*同步类型钩子 基本使用 const { SyncHook } require(tapable);class myCompiler {constructor() {this.hooks {// 1. 创建hooks(webpack完成)syncHook: new SyncHook([name, age]),};// 2. 用hooks监听事件自定义pluginthis.hooks.syncHook.tap(event1, (name, age) {console.log(event1事件监听执行了:, name, age);});this.hooks.syncHook.tap(event2, (name, age) {console.log(event2事件监听执行了:, name, age);});} }const compiler new myCompiler(); // 3. 发出去事件(webpack完成) compiler.hooks.syncHook.call(小张, 20);结果 bail 当有返回值时就不会执行后续的事件触发了 const { SyncBailHook } require(tapable);class myCompiler {constructor() {this.hooks {// 1. 创建hooksbailHook: new SyncBailHook([name, age]),};// 2. 用hooks监听事件自定义pluginthis.hooks.bailHook.tap(event1, (name, age) {console.log(event1事件监听执行了:, name, age);return 123});this.hooks.bailHook.tap(event2, (name, age) {console.log(event2事件监听执行了:, name, age);});} }const compiler new myCompiler(); // 3. 发出去事件 compiler.hooks.bailHook.call(小张, 20);输出结果 Loop 当返回值为true就会反复执行该事件当返回值为undefined或者不返回内容就退出事件 const { SyncLoopHook } require(tapable);class myCompiler {constructor() {this.hooks {// 1. 创建hooksloopHook: new SyncLoopHook([name, age]),};let count 0;// 2. 用hooks监听事件自定义pluginthis.hooks.loopHook.tap(event1, (name, age) {if (count 5) {console.log(event1事件监听执行了:, name, age);count;return true;} else {return;}});this.hooks.loopHook.tap(event2, (name, age) {console.log(event2事件监听执行了:, name, age);});} }const compiler new myCompiler(); // 3. 发出去事件 compiler.hooks.loopHook.call(小张, 20);输出结果 Waterfall 当返回值不为undefined时会将这次返回的结果作为下次事件的第一个参数 const { SyncWaterfallHook } require(tapable);class myCompiler {constructor() {this.hooks {// 1. 创建hookswaterfallHook: new SyncWaterfallHook([name, age]),};// 2. 用hooks监听事件自定义pluginthis.hooks.waterfallHook.tap(event1, (name, age) {console.log(event1事件监听执行了:, name, age);// return “小李”小李作为下一个事件的第一个参数return 小李;});this.hooks.waterfallHook.tap(event2, (name, age) {console.log(event2事件监听执行了:, name, age);});} }const compiler new myCompiler(); // 3. 发出去事件 compiler.hooks.waterfallHook.call(小张, 20);输出结果 Async*异步类型钩子 Parallel 并行不会等到上一个事件回调执行结束才会执行下一次事件处理回调 const { AsyncParallelHook } require(tapable);class myCompiler {constructor() {this.hooks {// 1. 创建hooksparallelHook: new AsyncParallelHook([name, age]),};// 2. 用hooks监听事件自定义pluginthis.hooks.parallelHook.tapAsync(event1, (name, age) {setTimeout(() {console.log(event1事件监听执行了:, name, age);}, 3000);});this.hooks.parallelHook.tapAsync(event2, (name, age) {setTimeout(() {console.log(event2事件监听执行了:, name, age);}, 3000);});} }const compiler new myCompiler(); // 3. 发出去事件 compiler.hooks.parallelHook.callAsync(小张, 20);输出结果 Series 串行会等待上一次异步的Hook即按照注册的顺序依次执行 const { AsyncSeriesHook } require(tapable);class myCompiler {constructor() {this.hooks {// 1. 创建hooksseriesHook: new AsyncSeriesHook([name, age]),};// 2. 用hooks监听事件自定义pluginthis.hooks.seriesHook.tapAsync(event1, (name, age, callback) {console.log(event1事件监听执行了:, name, age);// 这个callback决定下一个事件的执行callback();});this.hooks.seriesHook.tapAsync(event2, (name, age, callback) {console.log(event2事件监听执行了:, name, age);// 这个callback决定发出事件中的函数执行callback();});} }const compiler new myCompiler(); // 3. 发出去事件 // 第三个参数决定第一个事件的执行 compiler.hooks.seriesHook.callAsync(小张, 20, () {console.log(所有事件都执行完成啦); });输出结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/924569.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电信100m光纤做网站常州做上市公司律所

ctfshow的杂项签到题,下载压缩包之后里面有图片。 直接将图片用010editor打开,检索ctfshow可以看到答案。

网站主持人制作网站建设策划书总结

工业镜头是图像采集系统的重要光学设备。它的作用是将目标物体的像成在相机的感光面上。 一、工业镜头原理 镜头是对光线进行调制和变换,使目标能够成像到相机的感光芯片上。将不同折射率的硝材加工成高精度的曲面,再把这些曲面进行组合后设计成能够满…

郑州注册网站江东怎样优化seo

南邮杯CTF 文件包含 题目地址:asdf 点击后利用file函数对show.php进行文件利用 使用伪协议php://filter/readconvert.base64-encode/resourceindex.php访问index.php文件 base64解码后得到flag [极客大挑战 2019]Secret File 题目地址:BUUCTF在线评测 …

网站建设 保密wordpress文章权限

nuget 是.Net平台上的包管理器, 对于包的发布(打包 package)和消费(下载依赖管理)都有很好的支持, 本文仅仅关注消费端, nuget项目依赖定义格式 新版 nuget 和VS 2019 都推荐项目依赖采用 PackageReference 格式, 这种格式的依赖声明是放到 .csproj 项目文件中的, 之前是使用…

网站建设登录界面设计步骤百度网站登录入口

前言现在对于Docker容器的隔离性都有所了解了,但对容器IP地址的分配、容器间的访问等还是有点小疑问,如果容器的IP由于新启动导致变动,那又怎么才能保证原有业务不会被影响,这就和网络有挂钩了,接下来就大概说说。正文…

wordpress软件站模板网页设计是做什么

引言 JSON,作为一种轻量级的数据交换格式,因其易于人阅读和编写,同时也易于机器解析和生成,而被广泛应用于网络通信和配置文件中。在Java中,有两个强大的工具帮助咱们处理JSON数据——Jackson和Gson。这两个库各有千秋…

郑州金水区建设局网站如何打开用wordpress

类型 说明 后缀或前缀 示例 sbyte 有符号 8 位整数 y 86y 0b00000101y byte 无符号 8 位自然数 uy 86uy 0b00000101uy int16 有符号 16 位整数 s 86s uint16 无符号 16 位自然数 us 86us int int32 有符号 32 位整数 l none。 86 86l uint uint32 无符号 32 位自然数 u 或 ul 8…

网站优化是怎么做的网络推广方案下拉管家xiala11

一、需求 在执行 mvn clean package -Dmaven.test.skiptrue 后,生成的 jar 包带有自定义系统时间。 二、实现 方法一:使用自带属性(不推荐) 使用系统时间戳,但有一个问题,就是默认使用 UTC0 的时区。举例…

网站推广广告包装设计十大网站

前言:MySQL有很多的可视化管理工具,比如“mysql-workbench”和“sequel-pro-”。 现在我写MySQL的终端命令操作的文章,是想强化一下自己对于MySQL的理解,总会比使用图形化的理解透彻,因为我本来就比较喜欢写代码。同时…

德赞网站建设网站制作企业网站的设计公司

文章目录1. 题目2. 解题1. 题目 给定一个整数数组 nums ,你可以对它进行一些操作。 每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除每个等于 nums[i] - 1 或 nums[i] 1 的元素。 开始你拥有…

怎么做提卡密网站广东省造价工程信息网

作者:lesleyfootprint.network 数据源:Token Sector Dashboard ChatGPT 的热潮点燃了 AI 领域,AI 与区块链技术的融合成为市场关注的焦点。因为区块链的一个显著特征是它能够在链上安全地存储大量数据,这与 AI 模型对数据的密集…

佛山中小企业网站制作wordpress首页自定义广告位

出于MVVM学习的需要,复习下匿名方法和Lambda表达式,因为之前用的也比较少,所以用的也不是很熟练,Baidu下相关的知识,写了这个Demo,目标是用简单的方法展示这个怎么用。 这里偏重的和LINQ中的Lambda表达式 …

网站建设服务器介绍图片网站的类型

背景 1 工作需要,需要修改一个java的程序逻辑,之前都是用的frida修改的,但是现在的工作场景,重视效率,所以frida这种重工具被pass了,只能重新选其他工具,初始的时候是想用java本身的一些修改工…

双语网站建设报价营销与运营的区别

友情提示:全文13000多文字,预计阅读时间10-15分钟Spring Cloud Eureka作为常用的服务注册中心,我们有必要去了解其内在实现机制,这样出现问题的时候我们可以快速去定位问题。当我们搭建好Eureka Server服务注册中心并启动后&#…

广州达美网站建设wordpress黑帽插件

某项目中,我要给别人封装一个深度学习算法的SDK接口,运行在RK3588平台上,然后客户给我的交叉编译工具链是 然后我用他们给我的交叉编译工具链报下面的错误: aarch64-buildroot-linux-gnu-gcc --version /data/chw/aarch64/bin/cca…

免费建站网页无需登陆广西新狐网络科技有限公司

在主要课程学完并确定论文题目后,研究生撰写论文的时间为一年半至两年。(一)论文选题的要求1. 选题必须有一定的理论意义或应用价值论文选题必须对国民经济建设或在学术上有一定的价值。2.国内外研究动态论文选题时,学生必须掌握与该课题有关…

怎样做网站公司的销售如何修改百度上面的门店号码

转: js判断数组里是否有重复元素的方法 https://blog.csdn.net/longzhoufeng/article/details/78840974第一种方法:但是下面的这种方法数字字符串类似相同,返回的还是真,有点不靠谱,如果是其它的字符是可以的 var ary1…

杭州海淀区网站建设详情页设计思路遵循哪五个营销环节

目的: 鉴于目前网络上没有完整的kafka数据投递至splunk教程,通过本文操作步骤,您将实现kafka数据投递至splunk日志系统 实现思路: 创建kafka集群部署splunk,设置HTTP事件收集器部署connector服务创建connector任务&a…

h5技术建设网站汽车网页

一、新建一个立方体 ShiftA新建一个立方体用来演示。 二、物体的移动 xyz轴移动 点击下图图左侧的移动选项后,选中要移动的物体,会出现三个箭头的方向,这分别代表沿着x、y、z轴移动。xyz平面移动 这个小正方体代表沿着某一个面移动&#…

建立平台网站要多久小米网站制作

网络安全的重要性 网络安全是指保护网络系统免受未授权的访问、攻击、破坏或未经授权的数据泄露的能力。随着互联网的普及和数字化进程的加速,网络安全问题日益凸显,成为个人、企业和国家必须面对的重要挑战。 网络安全的威胁 网络安全威胁包括黑客攻…