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

webpack(高级)--创建自己的loader 同步loader 异步loader loader参数校验

webpack

创建自己的loader

loader是用于对模块的源代码进行转换(处理) 我们使用过很多loader 比如css-loader style-loader babel-loader

我么如果想要自己创建一个loader

首先创建webpack环境
pnpm add webpack webpack-cli -D

之后创建loader模块
loader本质上是一个导出为函数的javascript模块
loader runner库会调用这个函数 然会将上一个loader产生的结果或者资源文件传入进去

编写一个m-loader-01.js模块 这个函数会接收三个参数
content:资源文件的内容
map:sourcemap相关的数据
meta:一些元数据

module.exports = function (content, map, meta) {console.log("01" + content);return content;
};

建立webpack.config.js文件
并使用自己的loader

const path = require("path");module.exports = {mode: "development",entry: "./src/main.js",output: {path: path.resolve(__dirname, "./build"),filename: "bundle.js",},module: {rules: [{test: /\.js$/,use: ["./m-loader/m-loader-01.js","./m-loader/m-loader-02.js","./m-loader/m-loader-03.js",],},],},
};

具体文件目录
在这里插入图片描述
打包后的效果
在这里插入图片描述

同步的loader

什么是同步的loader
默认创建的loader就是同步的loader
这个loader必须通过return 或者this.callback来返回结果 交给下一个loader来处理
通常在有错误的情况下 我们会使用this.callback

返回值传递给下一个loader

module.exports = function (content) {console.log("03" + content);return content + 'aaaa';
};
module.exports = function (content) {console.log("02" + content);return content + "bbbb";
};
module.exports = function (content, map, meta) {console.log("01" + content);return content;
};

在这里插入图片描述

但是当如果有异步操作时 是不会等待的 会返回undefined

module.exports = function (content) {setTimeout(() => {console.log("03" + content);return content + "aaaa";}, 10000);
};

在这里插入图片描述
解决方法 使用异步loader (后面会提到)
使用callback传递 优点是可以处理错误信息
第一个参数:错误信息
第二个参数:传递给下一个loader的内容

module.exports = function (content) {//this绑定对象const callback = this.callback;callback(null, "哈哈哈");
};

在这里插入图片描述

异步loader

什么是异步loader
有时候我们使用loader时会进行一些异步操作
我们希望在异步操作完成后 在返回这个loader处理的结果
这时候我们就要使用异步的loader
loader-runner已经在执行loader时给我们提供了方法 让loader变成一个异步的loader

module.exports = function (content) {//this绑定对象const callback = this.async();setTimeout(() => {console.log("03" + content);callback(null, content + "aaaa");}, 2000);
};

在这里插入图片描述

给loader传递参数

我们可以使用getOptions

module.exports = function (content) {//1.获取使用loader时 传递进来的参数const options = this.getOptions();console.log(options);console.log("04", content);return content;
};
const path = require("path");module.exports = {mode: "development",entry: "./src/main.js",output: {path: path.resolve(__dirname, "./build"),filename: "bundle.js",},module: {rules: [{test: /\.js$/,use: [// "./m-loader/m-loader-01.js",// "./m-loader/m-loader-02.js",// "./m-loader/m-loader-03.js",{loader: "./m-loader/m-loader-04.js",options: {name: "kobe",age: 24,},},],},],},
};

在这里插入图片描述

校验参数

我们可以通过一个webpack官方提供的校验库schema-utils 安装对应的库
pnpm add schema-utils

const { validate } = require("schema-utils");
const loader04Schema = require("../schema/loader-04-schema.json");module.exports = function (content) {//1.获取使用loader时 传递进来的参数const options = this.getOptions();console.log(options);//2.校验参数是否符合规则validate(loader04Schema, options);console.log("04", content);return content;
};

创建schema文件与规则文件

{"type": "object","properties": {"name": {"type": "string","description": "请输入名称,并且是string类型"},"age": {"type": "number","description": "请输入年龄,并且是number类型"}}
}

文件目录
在这里插入图片描述

相关文章:

webpack(高级)--创建自己的loader 同步loader 异步loader loader参数校验

webpack 创建自己的loader loader是用于对模块的源代码进行转换(处理) 我们使用过很多loader 比如css-loader style-loader babel-loader 我么如果想要自己创建一个loader 首先创建webpack环境 pnpm add webpack webpack-cli -D 之后创建loader模块…...

Assignment写作各个部分怎么衔接完美?

Assignment格式很简单,就只有四个部分,按着通用的套路来,发现也没什么难度。不过这4个部分自己需要衔接完美,下面就给大家分享一下写Assignment最简单的方法。 如果没有目录可以放在第一页的开头,用“标题字体”加重显…...

医疗器械实验室设计规划全了SICOLAB

一、通用型实验室医疗器械物理性能能检测中,有部分通用型试验,可覆盖不同产品检测,这些实验室需要重点考虑、设计。1、微粒检测室微粒检测室用于医疗器械产品微粒检测,包括微粒、落絮、药液滤除率等项目。微粒检测室要求为洁净室&…...

2023年浙江建筑施工物料提升(建筑特种作业)模拟试题及答案

百分百题库提供特种工(物料提升机)考试试题、特种工(物料提升机)考试预测题、特种工(物料提升机)考试真题、特种工(物料提升机)证考试题库等,提供在线做题刷题,在线模拟考…...

shell编程经典案例,建议收藏

1、编写hello world脚本 #!/bin/bash# 编写hello world脚本echo "Hello World!"2、通过位置变量创建 Linux 系统账户及密码 #!/bin/bash# 通过位置变量创建 Linux 系统账户及密码#$1 是执行脚本的第一个参数,$2 是执行脚本的第二个参数 useradd "$1" …...

C++通用容器

容器简介1.1 容器的分类序列容器 vector, list, deque容器适配器 queue, stack, priority_queue关联容器 set, map, multiset, multimap序列容器是提供一组线性储存的容器,而容器适配器负责将它们按照数据结构的方式组织起来,关联容器提供关键字与值之间…...

字符串的特殊读取——基于蓝桥杯两道题目(C/C++)

目录 1 例题 1.1 卡片换位 1.2 人物相关性分析 2 字符串的读取 2.1 综述 2.2 scanf 2.3 getline/getchar/get 2.4 注意 2.5 说明 先看例题 1 例题 1.1 卡片换位 问题描述 你玩过华容道的游戏吗? 这是个类似的,但更简单的游戏。 看…...

[足式机器人]Part3机构运动微分几何学分析与综合Ch01-4 平面运动微分几何学——【读书笔记】

本文仅供学习使用 本文参考: 《机构运动微分几何学分析与综合》-王德伦、汪伟 《微分几何》吴大任 Ch01-4 平面运动微分几何学1.2.3-2 点轨迹的Euler-Savary公式1.2.4 高阶曲率理论1.2.3-2 点轨迹的Euler-Savary公式 例1-7: 平面曲柄摇杆机构的 Euler-Sa…...

【每日一题Day120】LC2341数组能形成多少数对 | 哈希表 排序

数组能形成多少数对【LC2341】 给你一个下标从 0 开始的整数数组 nums 。在一步操作中,你可以执行以下步骤: 从 nums 选出 两个 相等的 整数从 nums 中 移除这两个整数,形成一个 数对 请你在 nums 上多次执行此操作直到无法继续执行。 返回一…...

win11/10+opencv3.x/4.x配置 VS2019方法(简单使用,亲测)

首先下载 opencv,去官网下载百度》输入opencv,点击opencv|home,进入官网。点击 “Library”---->Release点击 对应版本下的 window版本,点击 --安装--extract---》设置路径。这个就是把库文件扩展到指定的路径下,扩…...

HTTP协议---详细讲解

目录 一、HTTP协议 1.http 2.url url的组成: url的保留字符: 3.http协议格式​编辑 ①http request ②http response 4.对request做出响应 5.GET与POST方法 ①GET ②POST 7.HTTP常见Header ①Content-Type:: 数据类型(text/html等)在上文…...

Syntax-Aware Aspect-Level Sentiment Classification with PWCN 论文阅读笔记

一、作者 Chen Zhang, Qiuchi Li, and Dawei Song. 2019. Syntax-Aware Aspect-Level Sentiment Classification with Proximity-Weighted Convolution Network. In Proceedings of the 42nd International ACM SIGIR Conference on Research and Development in Information …...

hadoop考试应急

概述 四大特点:大量化、快速化、多元化、价值化 关键技术:采集、存储管理、处理分析、隐私和安全 计算模式:批处理、流、图、查询分析计算 Hadoop处理架构 了解就好 2007年,雅虎在Sunnyvale总部建立了M45——一个包含了4000…...

【React】Hooks

🚩🚩🚩 💎个人主页: 阿选不出来 💨💨💨 💎个人简介: 一名大二在校生,学习方向前端,不定时更新自己学习道路上的一些笔记. 💨💨💨 💎目…...

升级Room引发的惨案!!

kotlin升级 在升级kotlin的时候,直接升级到大版本的kotlin(比如1.7以上),直接报错,只是报错不知道原因。 koltin Release details 后来把koltin版本改成1.6.0,报如下的错,我们才知道gradle是需…...

RPC框架:一文带你搞懂RPC

RPC是什么(GPT答) ChatGPT回答: RPC(Remote Procedure Call)是一种分布式应用程序的编程模型,允许程序在不同的计算机上运行。它以一种透明的方式,将一个程序的函数调用定向到远程系统上的另一个程序,而使…...

电子招标采购系统源码—企业战略布局下的采购寻源

​ 智慧寻源 多策略、多场景寻源,多种看板让寻源过程全程可监控,根据不同采购场景,采取不同寻源策略, 实现采购寻源线上化管控;同时支持公域和私域寻源。 询价比价 全程线上询比价,信息公开透明&#xff0…...

P16 激活函数与Loss 的梯度

参考:https://www.ngui.cc/el/507608.html?actiononClick这里面简单回顾一下PyTorch 里面的两个常用的梯度自动计算的APIautoGrad 和 Backward, 最后结合 softmax 简单介绍一下一下应用场景。目录:1 autoGrad2 Backward3 softmax一 autoGrad输入 x输出损…...

ThinkPHP5美食商城系统

有需要请私信或看评论链接哦 可远程调试 ThinkPHP5美食商城系统一 介绍 此美食商城系统基于ThinkPHP5框架开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。用户注册登录后可购买美食,个人中心,评论和反馈等&#xff…...

Vue3 - $refs 使用教程,父组件调用获取子组件数据和方法(setup() / <script setup>)

前言 在 Vue2 中父组件使用 $refs 调用子组件数据和方法非常简单,但在 Vue3 中这种方法行不通了。 本文实现了 Vue3 中父组件使用 $refs 获取调用子组件数据和方法教程, 并且提供了 setup() 与 <script setup> 两种 “开发模式” 的示例代码,请根据需要进行选择。 网…...

Cosmos-Reason1-7B保姆级教程:从NVIDIA模型下载到浏览器界面可用全流程

Cosmos-Reason1-7B保姆级教程&#xff1a;从NVIDIA模型下载到浏览器界面可用全流程 本文面向想要快速上手Cosmos-Reason1-7B推理工具的初学者&#xff0c;无需深厚技术背景&#xff0c;跟着步骤操作即可完成本地部署和使用。 1. 工具简介&#xff1a;你的本地推理助手 Cosmos-…...

OpenClaw技能扩展指南:为nanobot添加自定义QQ机器人功能

OpenClaw技能扩展指南&#xff1a;为nanobot添加自定义QQ机器人功能 1. 为什么需要QQ机器人集成 去年夏天&#xff0c;我发现自己经常在深夜调试代码时&#xff0c;需要反复切换手机和电脑查看运行结果。这种低效的操作让我开始寻找一种更优雅的解决方案——通过聊天工具直接…...

别再用直方图了!用Python+OpenCV手把手教你提取图像纹理特征(GLCM实战)

别再用直方图了&#xff01;用PythonOpenCV手把手教你提取图像纹理特征&#xff08;GLCM实战&#xff09; 当我们需要区分砂纸和丝绸的微观图像时&#xff0c;灰度直方图会给出完全相同的统计结果——这正是传统分析方法在纹理识别中的致命缺陷。本文将带您用OpenCV和scikit-im…...

YOLOv12惊艳效果展示:注意力机制让目标检测更精准

YOLOv12惊艳效果展示&#xff1a;注意力机制让目标检测更精准 1. 突破性效果预览 YOLOv12的出现彻底改变了我们对实时目标检测的认知。这款基于注意力机制的全新架构&#xff0c;在保持YOLO系列标志性速度的同时&#xff0c;将检测精度推向了前所未有的高度。让我们先看几个令…...

Python调用SM9遭遇“Unknown curve”?紧急修复手册:从OpenSSL 3.0.7到国密SM9曲线OID映射全对照

第一章&#xff1a;Python调用SM9遭遇“Unknown curve”问题的根源定位当使用 Python&#xff08;如通过 cryptography 或 gmssl 库&#xff09;实现国密 SM9 算法时&#xff0c;常见报错 ValueError: Unknown curve 并非源于椭圆曲线参数缺失&#xff0c;而是因底层密码学库未…...

水晶排课 13.9.0.5:专注学校教务排课场景,集智能自动排课、灵活课表调整、多维度视图与便捷输出于一体,高效解决排课冲突,适用于中小学各类教务管理需求。

大家好&#xff0c;我是大飞哥。在学校教务管理中&#xff0c;排课是一项繁琐又容易出错的工作 —— 既要兼顾教师课时、班级需求&#xff0c;又要避免冲突&#xff0c;这款水晶排课 13.9.0.5就是专门解决这些问题的工具&#xff0c;它是一款专业高效的教务排课软件&#xff0c…...

ClearerVoice-Studio语音处理效率实测:1分钟音频平均处理耗时18秒

ClearerVoice-Studio语音处理效率实测&#xff1a;1分钟音频平均处理耗时18秒 1. 测试背景与工具介绍 ClearerVoice-Studio是一个开箱即用的语音处理工具包&#xff0c;集成了多种先进的AI语音处理功能。这个工具最大的特点就是简单易用&#xff0c;不需要用户具备深度学习背…...

母版设置、讲义母版、模板设置

母版设置、讲义母版、模板设置一. 母版设置1.1 插入母版及版式1.2 重命名母版及版式1.3 版式设置1.4 例题二. 讲义母版2.1 讲义母版设置三. 模板设置3.1 导入模板3.2 例题一. 母版设置 1.1 插入母版及版式 插入母版 插入版式&#xff0c;先点击一下母版 1.2 重命名母版及版…...

Qwen3-VL-2B入门到应用:从环境部署到实际场景落地全解析

Qwen3-VL-2B入门到应用&#xff1a;从环境部署到实际场景落地全解析 1. 项目概述 Qwen3-VL-2B-Instruct是一款突破性的视觉语言模型&#xff0c;它将图像理解与自然语言处理能力完美结合。不同于传统只能处理文本的AI模型&#xff0c;这款模型能够真正"看懂"图片内…...

解决MathType在Word中加载失败的终极指南:从运行时错误53到MathPage.WLL缺失

1. 遇到MathType加载失败时先别慌 最近有不少朋友在系统升级后遇到了MathType无法正常加载的问题。作为一个经常和公式打交道的科研狗&#xff0c;我完全理解这种崩溃感——论文deadline近在眼前&#xff0c;公式编辑器却罢工了。最常见的两种报错是&#xff1a;"Please r…...