webpack练习之手写loader

手写一个style-loader来把样式文件插入head里面,准备工作 vue + webpack就自己弄了,webpack的一些配置也自己配置好

一、创建index.css文件

.box{width: 100px;height: 100px;background-color: red;
}

然后在vue的main.js文件中引入它

二、创建自定义loader文件

module.exports = function (content) {let str = `var style = document.createElement("style");style.innerHTML = ${JSON.stringify(content)};document.head.appendChild(style);`;return str;
};

webpack里面的loader配置

{test: /\.css$/,use: [resolve(__dirname, "../loader/testSytleLoader.js")],
},

在APP.vue文件里面使用

<template><div class="box"></div><router-view />
</template>

这个时候就会在页面看到效果了
在这里插入图片描述

三、升级优化

如果在样式文件中使用了背景图片,样式就会失败
在这里插入图片描述
原因就是在于背景图片的路径没有进行处理,浏览器找不到这个资源,因此我们还要处理背景图片,要是感兴趣可以自己去手写loader来处理,这里就直接使用css-loader来处理了,我们只需要处理css-loader处理好的内容
webpack的loader配置更改为

 {test: /\.css$/,use: [resolve(__dirname, "../loader/testSytleLoader.js"),"css-loader"],
},

这个时候,页面就变成这样了
在这里插入图片描述
css-loader处理之后的内容变成了js代码,所以需要对这个js代码进行处理
我们这里使用pitch函数来进行处理,如果不知道啥事pitch函数,看上一篇文章
优化后的loader

module.exports = function (content) {};
module.exports.pitch = function (remainingRequest) {// 要注意我使用的是箭头函数还是普通函数,这样才能保住this指向的正确性// remainingRequest  剩余还有哪些loader要来处理这个文件,也就是当前loader后面的所有loaderconsole.log(remainingRequest);//打印结果: C:\项目\webpack-study\node_modules\css-loader\dist\cjs.js!C:\项目\webpack-study\src\assets\index.css// 结果表明后续还有css-loader来处理这个index.css文件,使用的!来分割// 因为后面需要使用相对路径,所以需要使用this.utils.contextify来获取相对路径let absolutePath = remainingRequest.split("!").map((path) => {return this.utils.contextify(this.context, path);}).join("!");console.log(absolutePath); //../../node_modules/css-loader/dist/cjs.js!./index.csslet str = `/*** 这里相当于使用的内联loader,来获取css-loader处理好的内容,这里只能使用相对路径,所以才会有上面的处理,加!!防止继续执行css-loader的普通函数*/import style from "!!${absolutePath}"  const styleEl = document.createElement("style");styleEl.innerHTML = style;document.head.appendChild(styleEl);`;return str;   //有了return,也不会执行css-loader了
};

在这里插入图片描述

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

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

相关文章

jmeter二次开发发送java请求_保姆级教程!!!

一、引言 JMeter是Apache基金会开发的一款开源性能测试工具,广泛应用于软件性能测试领域。它能够模拟多线程并发用户对应用程序进行压力测试,以评估应用程序的性能和稳定性。然而,在实际使用过程中,用户可能会遇到需要发送Java请求的场景,例如测试Java Web应用程序或其他…

【Monero】Wallet RPC | Wallet CLI | 门罗币命令行查询余额、种子、地址等命令方法教程

ubuntu22.04 首先在运行daemon&#xff0c;详细安装运行教程可参考&#xff1a;The Monero daemon (monerod) ./monerodWallet CLI run ./monero-wallet-cli如果还没有钱包就根据提示创建钱包即可 输入密码 查询余额 balance查询种子 seed其他可执行命令操作&#xff1…

拌合楼管理软件开发(十一) 海康威视车牌识别摄像头安装调试,总算是跑通了。

前言&#xff1a;总算是调测通了 话接上回&#xff0c;车牌识别摄像头买回来了&#xff0c;卡在电源上了&#xff0c;今天抽时间把电源问题解决了&#xff0c;开始代码正式的调测。一切还算顺利了&#xff0c;没有再碰到打脸的事情了。 一、电源接线&#xff1a; 如同前面预想的…

selenium元素定位--xpath定位--层级与逻辑组合定位

其他元素非唯一时&#xff0c;又不想用xpath绝对定位时&#xff0c;需要用到层级与逻辑定位. 一、层级属性结合定位&#xff1a; 遇到元素没有class、name、id等或属性动态变化情况时&#xff0c;可以找父节点元素&#xff0c;父级节点没有id时&#xff0c;可以继续往上找id&…

linux在使用重定向写入文件时(使用标准C库函数时)使处理信号异常(延时)--问题分析

linux在使用重定向写入文件时(使用标准C库函数时)使处理信号异常(延时)–问题分析 在使用alarm函数进行序号处理测试的时候发现如果把输出重定向到文件里面会导致信号的处理出现严重的延迟(ubuntu18) #include <stdio.h> #include <stdlib.h> #include <unist…

UE5 C++ 3D血条 响应人物受伤 案例

一.3Dwidget 1.创建C Userwidget的 MyHealthWidget&#xff0c;声明当前血量和最大血量 UCLASS() class PRACTICEC_API UMyHealthWidget : public UUserWidget {GENERATED_BODY() public:UPROPERTY(EditAnywhere,BlueprintReadWrite,Category "MyWidget")float C…

Ubuntu连不上外网的问题—ping不通baidu.com

一、问题 虚拟机不能联网&#xff0c;ping百度时候出现这个问题 book100ask:~$ ping www.baidu.com ping: www.baidu.com: Name or service not known 二、解决办法 首先&#xff0c;定位问题&#xff0c;再问我出现的问题中&#xff0c;认为是NAT设置的问题&#xff0c;只要…

【Frida】【Android】02_JAVA层HOOK

&#x1f6eb; 系列文章导航 【Frida】【Android】01_手把手教你环境搭建 https://blog.csdn.net/kinghzking/article/details/136986950【Frida】【Android】02_JAVA层HOOK https://blog.csdn.net/kinghzking/article/details/137008446【Frida】【Android】03_RPC https://bl…

matlab编译成jar包

1、输入deploytool命令 2、选择Library Compiler 3、配置打包 4、有效文件 5、java函数调用 package com.beescloud.frame.matlab;import com.mathworks.toolbox.javabuilder.MWException; import test.Class1;public class MatlabTest {public static void main(String[] arg…

PanTools v1.0.17 多网盘批量管理 批量分享、转存、复制...

软件介绍 一款针对多个热门网盘的文件管理、批量分享、批量转存、批量复制、批量重命名、批量链接检测、跨账号移动文件、多账号文件搜索等&#xff0c;支持不同网盘的不同账号的资源文件操作。适用于网站站长、资源爱好者等&#xff0c;对于管理名下具有多个网盘多个账号具有…

UI风格汇:卡通风格(Cartoon Style),极具辨识度的风格

一、卡通风格的特点 卡通风格是一种在UI设计中常见的设计风格&#xff0c;它以卡通或漫画的形式呈现&#xff0c;具有夸张、可爱、幽默和生动的特点。卡通风格的UI设计通常使用明亮的色彩、简化的图形和夸张的表情来表达信息和情感。 以下是卡通风格在UI设计中的一些特点&…

【数字图像处理】改变图像灰度级别

改变图像灰度级别 首先&#xff0c;对原始图像 O O O进行灰度级量化: q int ⁡ ( O 2 i ) 2 i , q\operatorname{int}\left(\frac{O}{2^{i}}\right) \times 2^{i}, qint(2iO​)2i, 灰度级别256&#xff0c;128&#xff0c;64&#xff0c;32&#xff0c;16&#xff0c;8&…

是德科技KEYSIGHT MSOX2024A混合信号示波器

181/2461/8938产品概述&#xff1a; Keysight MSOX2024A 提供适合您预算的入门级价位&#xff0c;以及同类任何其他示波器所不具备的卓越性能和可选功能。凭借是德科技设计的 MegaZoom IV 定制 ASIC 技术&#xff0c;它每秒可提供高达 200,000 个波形。通过这种速度&#xff0…

Typescript语法总结

#Typescript 解决了什么问题 Typescript本质上是在 JavaScript 上增加一套静态类型系统&#xff08;编译时进行类型分析&#xff09;&#xff0c;强调静态类型系统是为了和运行时的类型检查机制做区分&#xff0c;TypeScript 的代码最终会被编译为 JavaScript。 Typescript 创造…

Multimodal Chain-of-Thought Reasoning in Language Models阅读笔记

论文&#xff08;2023年&#xff09;链接&#xff1a;https://arxiv.org/pdf/2302.00923.pdf GitHub项目链接&#xff1a;GitHub - amazon-science/mm-cot: Official implementation for "Multimodal Chain-of-Thought Reasoning in Language Models" (stay tuned a…

QToolButton的工具提示出现自身border-image背景图的问题解决

用QToolButton贴个图片&#xff0c;用来做个指示灯&#xff0c;当鼠标移动到指示灯&#xff0c;弹出工具提示&#xff0c;以便提示该灯用来干嘛的。预想像下面那样&#xff1a; 然而结果却如下&#xff1a; 在Qt Designer或代码中对该QToolButton设置样式表如下&#xff1a; QT…

中国国内怎么使用订阅升级Duolingo多邻国plus?多邻国使用教程

多邻国Duolingo合租平台&#xff0c;环球巴士 首单9折优惠码&#xff1a;110072 多邻国Duolingo是什么&#xff0c;能用来做什么&#xff1f; 众所周知&#xff0c;多邻国考试的性价比非常高&#xff0c;不仅考试时间短&#xff0c;出分也很快&#xff0c;国际认可度越来越高…

无人机采集图像的相关知识

1.飞行任务规划 一般使用飞行任务规划软件进行飞行任务的设计&#xff0c;软件可以自动计算相机覆盖和图像重叠情况。比如ArduPilot (ArduPilot - Versatile, Trusted, Open) 和UgCS (http://www.ugcs.com)是两个飞行任务规划软件&#xff0c;可以适用大多数无人机系统。 2.图…

教育行业信息数据化:探索8种不同的数据库类型及用途

前言 教育数据库是现代教育领域中不可或缺的重要工具&#xff0c;它们涵盖了多种类型&#xff0c;包括学生信息系统、学习管理系统、图书馆管理数据库、行政数据库、研究数据库、专业教育数据库等。这些数据库在教育机构中发挥着关键作用&#xff0c;为教育工作者和学生提供了…

探究 HTTPS 的工作过程

目录 1. HTTPS 协议原理 1.1. 为什么要有HTTPS协议 1.2. 如何理解安全 1.3. HTTPS 协议是什么 2. HTTPS 的前置概念 2.1. 什么是加密 && 解密 2.2. 为什么要加密 2.3. 常见的加密方式 2.3.1. 对称加密 2.3.2. 非对称加密 2.4. 数据摘要 && 数据指纹…