当前位置: 首页 > news >正文

webpack的loader机制

webpack的loader机制

loader本质上就是导出函数的JavaScript模块。导出的函数,可以用来实现内容的转换。

/*
* @param{string|Buffer} content 源文件的内容
* @param{object} [map] SourceMap数据
* @param{any} [meta] meta数据,可以是任何数据
* */
function webpackloader(context, map, meta) {}module.exports = webpackloader()

Normal Loader

Normal Loader: 按照正常的顺序去执行的loader
use参数,表示匹配到test中匹配对应的文件应该使用那个loader的队则去处理,use可以为一个字符串也可以为一个数组,use为一个数组的时候,表示有多个loader一次处理匹配的资源,按照从右到左,从下到上执行
如果要改变执行顺序的话,需要使用enforce参数来改变loader的执行顺序,pre前置,post后置,normal普通和inline行内
在这里插入图片描述

在这里插入图片描述

Pitching Loader

在webpack的loader中配置pitch属性,支持三个参数

/*
* @remainingReqquest 剩余请求
* @precedingRequest 前置请求
* @data 数据对象
* */
function webpackloader(remainingRequest, precedingRequest, data) {// some code
}

data用于数据参数,在pitch函数中往data对象上添加数据,之后在normal函数中通过this.data的方法读取已经添加的数据。
remainingRequest 表示在当前 loader 处理完毕后,还需要被后续 loader 处理的请求字符串。这个字符串由剩余的 loader 路径以 ! 分隔符组成,从右到左排列。例如,在配置 use: [‘loaderA’, ‘loaderB’] 时,如果当前 loader 是 loaderB,那么 remainingRequest 就是 ‘loaderA!’(如果还有其他 loader,则继续以 ! 分隔)。
precedingRequest 表示在 pitch 阶段已经迭代过的 loader 路径字符串,同样以 ! 分隔符组成。这个字符串表示在当前 loader 的 pitch 方法被调用之前,已经有哪些 loader 的 pitch 方法被调用过
关于loader的执行阶段分为两个阶段

  • 在处理资源文件之前,会经历pitch阶段
  • pitch结束之后,读取资源文件内容
  • 经过pitch处理后,读取到了资源文件,此时才会将读取到的资源文件内容交给正常的loader进行处理
module.exports = {module: {rules: [{test: /\.js$/,use: ['normal1-loader', 'normal2-loader']},{test: /\.js$/,use: ['pre1-loader', 'pre2-loader'],enforce: 'pre'},{test: /\.js$/,use: ['post1-loader', 'post2-loader'],enforce: 'post',}]}
}

在这里插入图片描述

故loader的执行顺序就是pitching阶段,调用loader.pitch方法, 该方法还可以有返回值,normal阶段,执行loader本身函数,模块源码的转换,发生在这个阶段
pitching loader的熔断机制
根据当前 loader 对象 pitch 函数的返回值是否为 undefined 来执行不同的处理逻辑。如果 pitch 函数返回了非 undefined 的值,则会出现熔断。即跳过后续的执行流程,开始执行上一个 loader 对象上的 normal loader 函数。

相关文章:

webpack的loader机制

webpack的loader机制 loader本质上就是导出函数的JavaScript模块。导出的函数,可以用来实现内容的转换。 /* * param{string|Buffer} content 源文件的内容 * param{object} [map] SourceMap数据 * param{any} [meta] meta数据,可以是任何数据 * */ fu…...

(STM32笔记)十一、通过EXTI外部中断实现 按键控制LED

我用的是正点的STM32F103来进行学习,板子和教程是野火的指南者。 之后的这个系列笔记开头未标明的话,用的也是这个板子和教程。 十一、通过EXTI外部中断实现 按键控制LED 十一、通过EXTI外部中断实现 按键控制LED1、按键模块按键原理图按键程序思路 2、中…...

假如家里太大了,wifi连不上了怎么办

最近有个土豪朋友抱怨,他家里太大了,一个路由器的Wi-Fi信号根本无法覆盖他们家的每个房间,都没办法上网看奥运会比赛了。(还好我是穷人,就没有这种烦恼T_T)。 然后我问他为何不用一个路由器作主路由器&…...

elementPlus 设置el-input文本域固定高度和禁止下拉

elementPlus 设置el-input文本域固定高度和禁止下拉 话不多说直接上代码 // resize"none" 禁止下拉<el-inputv-model"textarea"style"width: 240px"type"textarea"resize"none"placeholder"请输入"/>// 设…...

(转)领导人必过的三道关

为什么企业领导人享受优厚的待遇&#xff0c;为什么董事会对企业领导人千挑万选?因为企业生命如此脆弱&#xff0c;据美国《财 富》杂志报道&#xff0c;世界500强企业平均寿命40年&#xff0c;世界1000强企业平均寿命30年&#xff0c;一般跨国公司平均寿命10年。而就是这脆弱…...

速盾:cdn可以定时刷新缓存吗?

CDN&#xff08;Content Delivery Network&#xff09;是一种通过在全球各地分布的服务器上缓存和传送网站内容的技术&#xff0c;以提高用户访问速度和降低服务器负载。CDN的缓存机制可以减少用户对源服务器的请求次数&#xff0c;从而提高网站的响应速度和性能。但是&#xf…...

代码随想录算法训练营第二十九天| 62.不同路径、63. 不同路径 II

写代码的第二十九天 继续动归&#xff01;&#xff01;&#xff01; 62.不同路径 思路 解决问题1&#xff1a;dp[i][j]的的含义是什么&#xff1f;本题给的是一个二维的表&#xff0c;判断从左上角走到右下角有多少种路径&#xff0c;所以dp应该是二维数组&#xff0c;dp[i]…...

Go+Redis零基础到用户管理系统API实战_20240730 课程笔记

概述 如果您没有Golang的基础&#xff0c;应该学习如下前置课程。 Golang零基础入门Golang面向对象编程Go Web 基础Go语言开发REST API接口_20240728Go语言操作MySQL开发用户管理系统API教程_20240729Redis零基础快速入门_20231227 基础不好的同学每节课的代码最好配合视频进…...

ScreenAgent:基于LVLM的计算机控制智能体

ScreenAgent : A Vision Language Model-driven Computer Control Agent 论文链接: https://arxiv.org/abs/2402.07945https://arxiv.org/abs/2402.07945IJCAI 2024 1.概述 大型语言模型(LLM),诸如ChatGPT与GPT-4,在自然语言处理领域(涵盖生成、理解及对话等任务)展现出…...

谷粒商城实战笔记-129-商城业务-商品上架-nested数据类型场景

文章目录 扁平化处理扁平化处理导致的检索问题 解决方案&#xff1a;使用 nested 结构 在es的数据类型中有一个nested类型&#xff0c;本讲将重点讨论这个类型。 扁平化处理 PUT my_index/doc/1 {"group" : "fans","user" : [{"first&quo…...

axios请求响应拦截器

目录 axios-拦截器 拦截器的作用 请求拦截器-基本写法: axios请求拦截器-统一设置token 需求: 核心步骤: 关键代码: 响应拦截器-基本写法: axios响应拦截器-统一处理token失效 需求: 核心步骤: 关键代码: axios响应拦截器-数据剥离 需求: 核心步骤: 关键代码: ax…...

Python 中单例模式实现的几种方式

在设计模式中&#xff0c;单例模式是经常被提及和使用的一种模式。它保证一个类只有一个实例&#xff0c;并提供全局访问点。在Python中&#xff0c;有多种实现单例模式的方法。那么&#xff0c;如何选择合适的方法来实现单例模式呢&#xff1f; 单例模式在Python中的几种实现方…...

mysql数据库触发器同步数据

首先检查数据源库是否支持触发器&#xff0c;show ENGINES&#xff0c;如果FEDERATED是NO&#xff0c;表示未开启&#xff0c;如需开启&#xff0c;再mysql配置文件中&#xff0c;添加federated配置到mysqld下面。 一、同服务器不同库触发器同步&#xff0c;这里只举例插入数据…...

Prometheus-v2.45.0+Grafana+邮件告警

目录 普罗米修斯监控架构介绍 Prometheus 监控架构 1. 数据抓取&#xff08;Scraping&#xff09; 2. 时序数据库&#xff08;TSDB&#xff09; 3. 数据模型 4. PromQL 查询语言 5. 告警&#xff08;Alerting&#xff09; 6. Alertmanager 7. 可视化&#xff08;Visu…...

LeetCode——572. 另一颗树的子树

通过万岁&#xff01;&#xff01;&#xff01; 题目&#xff1a;给你两棵树&#xff0c;然后问subRoot是不是root的子树。也就是root某个节点的所有孩子节点在值和结构上完全与subRoot相同。思路&#xff1a;我的思路比较简单&#xff0c;就是遍历root&#xff0c;遇到root中…...

Spring Boot整合MyBatis-Flex

说明&#xff1a;MyBatis-Flex&#xff08;官网地址&#xff1a;https://mybatis-flex.com/&#xff09;&#xff0c;是一款数据访问层框架&#xff0c;可实现项目中对数据库的访问&#xff0c;类比MyBatis-Plus。本文介绍&#xff0c;在Spring Boot项目整合MyBatis-Flex。 创…...

重塑未来体验:边缘计算与云原生的完美邂逅

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《未来已来&#xff1a;云原生之旅》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、云原生的兴起 2、边缘计算的兴起 二、边缘计算基础 …...

浅谈基础数论(c++)

目录 一些常见的符号表示阶乘定理 快速幂模板题代码扩展&#xff1a;矩阵快速幂主要作用 欧拉函数扩展积性函数 欧拉函数求法筛选法求欧拉函数&#xff08;积性函数&#xff09; 扩展欧几里得裴蜀定理问题分析代码 问题分析 同余与逆元如何求解逆元扩展欧几里得 例题讲解X-Magi…...

jdk 17新特性 sealed 关键字

通俗理解 sealed 关键字就是给对象继承加了权限控制一样&#xff0c;你必须在我的规则范围内才可以继承我的类 使用 permits 关键字控制允许哪些子类继承 子类必须加以下三个关键字&#xff1a; final 最终继承类&#xff08;继承到这个类就不允许再往下继承了&#xff09;n…...

在仪器计量校准中,无尘车间洁净室检测有哪些方法和流程?

仪器计量校准行业内&#xff0c;无尘车间洁净室检测可以说是较为热门的业务&#xff0c;因为其预算高&#xff0c;且检测流程不是太繁琐&#xff0c;很多仪器计量校准机构也是设立相关实验室&#xff0c;专门处理相关仪器的检测。不过虽然许多机构想要涉足该领域&#xff0c;但…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建

【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)

引言 在嵌入式系统中&#xff0c;用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例&#xff0c;介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单&#xff0c;执行相应操作&#xff0c;并提供平滑的滚动动画效果。 本文设计了一个…...