webpack练习之手写loader

news2024/12/23 8:43:10

手写一个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后面的所有loader
  console.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.css

  let 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.coloradmin.cn/o/1547622.html

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

相关文章

MyBatis-Plus分页接口实现教程:Spring Boot中如何编写分页查询

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

港大新工作 HiGPT:一个模型,任意关系类型 !

论文标题&#xff1a; HiGPT: Heterogeneous Graph Language Model 论文链接&#xff1a; https://arxiv.org/abs/2402.16024 代码链接&#xff1a; https://github.com/HKUDS/HiGPT 项目网站&#xff1a; https://higpt-hku.github.io/ 1. 导读 异质图在各种领域&#xf…

云原生靶场kebernetesGoat、Metarget

靶场 文章目录 靶场kebernetesGoat靶场安装Docker in DockerSSRF漏洞容器逃逸到主系统Docker CIS 基线分析Kubernetes CIS 安全基线分析分析被部署挖矿软件的容器镜像获取环境信息Hidden in layersRBAC最低权限配置错误使用 Sysdig Falco 进行运行时安全监控和检测 Metarget ke…

UE5、CesiumForUnreal实现海量POI撒点显示与聚合功能

1.实现目标 POI是UE+GIS三维场景中经常需要展示的要素,在UE中常用的表示POI方法有两种。一种是Mesh,即空间的方式;另一种是Widget,即屏幕上的方式,本文这里使用的是Widget屏幕展示的形式来表示POI。 本文这里使用的POI点位数量共3.3w+,采用直接网格聚合算法,并进行性能优…

ROS机器人入门第四课:话题通信

文章目录 ROS机器人入门第四课&#xff1a;话题通信一、话题通信概述&#xff08;一&#xff09;概念&#xff08;二&#xff09;作用 二、话题通信基本操作需求:分析:流程:&#xff08;一&#xff09;发布方解释一些关键的ROS函数和概念&#xff1a; &#xff08;二&#xff0…

2024年福建事业单位招聘详细流程

2024年福建事业单位招聘详细流程&#xff0c;速速查收&#xff01;

湖北汽车工业学院 实验一 关系数据库标准语言SQL

头歌 实验一 关系数据库标准语言SQL 制作不易&#xff01;点个关注呗&#xff01;为大家创造更多的价值&#xff01; 目录 头歌 实验一 关系数据库标准语言SQL**制作不易&#xff01;点个关注呗&#xff01;为大家创造更多的价值&#xff01;** 第一关&#xff1a;创建数据库第…

简单服务器通信、IO多路复用(select、poll、epoll)以及reactor模式。

网络编程学习 简单服务器通信TCP三次握手和四次挥手三次握手&#xff08;如下图&#xff09;常见问题&#xff1f; 四次挥手 client和server通信写法server端client端 通信双方建立连接到断开连接的状态转换怎么应对多用户连接&#xff1f;缺点 IO多路复用select优缺点 pollpol…

算法---动态规划练习-5(下降路径最小和)

下降路径最小和 1. 题目解析2. 讲解算法原理方法一方法二 3. 编写代码法一法二 1. 题目解析 题目地址&#xff1a;点这里 2. 讲解算法原理 方法一 首先&#xff0c;通过matrix的大小确定矩阵的行数m和列数n。 创建一个大小为(m1) (n2)的二维动态规划数组dp&#xff0c;其中d…

OC 技术 苹果内购

一直觉得自己写的不是技术&#xff0c;而是情怀&#xff0c;一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的&#xff0c;希望我的这条路能让你们少走弯路&#xff0c;希望我能帮你们抹去知识的蒙尘&#xff0c;希望我能帮你们理清知识的脉络&#xff0…

2022 年甘肃省职业院校技能大赛 高职组 网络系统管理竞赛 网络构建模块试题

2022 年甘肃省职业院校技能大赛 高职组网络系统管理竞赛 网络构建模块试题 目 录 考试说明… 3 任务描述… 3 任务清单… 3 &#xff08;一&#xff09;基础配置… 3 &#xff08;二&#xff09;有线网络配置… 4 &#xff08;三&#xff09;无线网络配置… 6 &#xff08;四&a…

惊艳亮相!新版飞桨星河社区邀您共赴星辰大海

亲爱的开发者们&#xff1a; 一场始于好奇、归于热爱的邂逅&#xff0c;让开发者们在飞桨星河社区相聚&#xff0c;相逢于活动、课程、比赛、项目……五年来&#xff0c;千万开发者的共同参与&#xff0c;让这个社区更富活力、更加温暖。 2018年&#xff0c;AI Studio 1.0版本上…

RHCE- 4-Web服务器(2)

基于https协议的静态网站 概念解释 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。 HTTP协议以明文方式发送内容&#xff0c;不提供任何方式的数据加密&#xff0c;如果攻击者截取了Web浏览器和网站服务器之间的传输报文&#xff0c;就可以直接读懂其中…

LVS负载均衡(load balance)

一 LVS LVS&#xff1a;Linux Virtaul Server&#xff0c;该软件的功能是实现 LB&#xff08;load balance&#xff09; 二LVS 的三种工作模式 1.NAT 模式&#xff08;NAT&#xff09; LVS 服务器同时充当一台 NAT 网关&#xff0c;拥有公有 IP &#xff0c;同时负责将针对此…

Apple Vision Pro应用合集

这里给大家分享一个网站&#xff0c;手机了最新的apple vision pro 上面运行的应用。 1、查找应用&#xff1a;用户可以浏览特色推荐的应用&#xff0c;或者通过随机挑选功能发现新的应用。 2、社区交流&#xff1a;提供社区功能&#xff0c;用户可以在这里交流使用体验、分享…

Chrome/Edge 使用 Markdown Viewer 查看 Markdown 格式文件

Chrome/Edge 使用 Markdown Viewer 查看 Markdown 格式文件 0. 引言1. 安装 Markdown Viewer 插件2. 使用 Markdown Viewer 阅读 Markdown 格式文件 0. 引言 大部分程序员都喜欢 Markdown 格式的文件&#xff0c;这时给一些没有在电脑上安装 Markdown 编辑器的同事分享资料时&…

SAP gui 组服务器 提示 Error service sapmsPRD unknown

/etc/hosts 追加IP地址和域名的配对关系 /etc/services 追加 sapms[sid] 3601/tcp

java数据结构与算法刷题-----LeetCode665. 非递减数列

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 解题思路&#xff1a;时间复杂度O( n n n)&#xff0c;空间复杂度…

在vscode终端terminal加大栈空间How to increase max stack size in c++ using vscode

参考:https://devpress.csdn.net/cloud/63268204fd0b112779162383.html Answer a question In many dynamic programming and graph problems it is required to do long depth recursion. I am currently using vscode and mingw in windows for my c programs. But in defau…

计算机视觉之三维重建(4)---三维重建基础与极几何

文章目录 一、三维重建基础1.1 问题引入1.2 线性解法1.3 非线性解法1.4 多视图几何的关键问题 二、极几何与基础矩阵2.1 极几何2.2 极几何特例2.3 本质矩阵2.4 本质矩阵的性质2.5 基础矩阵2.6 基础矩阵的性质 三、基础矩阵估计 一、三维重建基础 1.1 问题引入 1. 从单张图像恢…