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.hqwc.cn/news/570575.html

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

相关文章

Redis入门三(主从复制、Redis哨兵、Redis集群、缓存更新策略、缓存穿透、缓存击穿、缓存雪崩)

文章目录 一、主从复制1.单例redis存在的问题2.主从复制是什么&#xff1f;3.主从复制的原理4.主从搭建1&#xff09;准备工作2&#xff09;方式一3&#xff09;方式二 5.python中操作1&#xff09;原生操作2&#xff09;Django的缓存操作 二、Redis哨兵&#xff08;Redis-Sent…

Kibana的安装(Linux版)

Kibana是一个针对Elasticsearch的开源分析及可视化平台&#xff0c;用来搜索、查看交互存储在Elasticsearch索引中的数据。使用Kibana&#xff0c;可以通过各种图表进行高级数据分析及展示。 Kibana让海量数据更容易理解。它操作简单&#xff0c;基于浏览器的用户界面可以快速创…

[GXYCTF2019]StrongestMind

web请求类题目&#xff0c;要求1000次 import requests from bs4 import BeautifulSoup import time urlhttp://ad7bc925-bc7a-4881-8a75-9045b60d4ab2.node5.buuoj.cn:81/index.php srequests.session() #维持会话 datas.get(url) for i in range(1001):soupBeautifulSoup(d…

记录些LLM相关的知识

MMR MMR&#xff08;Maximum Marginal Relevance&#xff09;最大边际相关性是一种用于信息检索和推荐系统的算法&#xff0c;它的目的是在推荐项目时平衡相关性和多样性。MMR算法旨在找出与用户查询最相关的同时又足够多样化的项目集合。 在信息检索领域&#xff0c;MMR算法通…

10.IO流(一)

文章目录 IO流一、File1.创建对象1.1 创建File类的对象1.2 注意1.3 绝对路径、相对路径 2.常用方法1:判断文件类型、获取文件信息3.常用方法2:创建文件、删除文件3.1 File类创建文件的功能3.2 File类删除文件的功能 4.常用方法3:遍历文件夹4.1 File类提供的遍历文件夹的功能4.2…

jupyter notebook导出含中文的pdf(LaTex安装和Pandoc、MiKTex安装)

用jupyter notebook导出pdf时&#xff0c;因为报错信息&#xff0c;需要用到Tex nbconvert failed: xelatex not found on PATH, if you have not installed xelatex you may need to do so. Find further instructions at https://nbconvert.readthedocs.io/en/latest/install…

Landsat 8 Landsat8 Collection2表面反射率数据

简介 Landsat8 Collection2表面反射率数据&#xff0c;属Collection2二级数据产品&#xff0c;分辨率为30米&#xff0c;基于陆地表面反射率代码(LaSRC)(版本1.5.0)生成&#xff0c;该算法利用沿海气溶胶波段进行气溶胶反演测试&#xff0c;还利用了MODIS的辅助气候数据和独特…

HarborCDN技术分析

一、介绍 简要介绍 ​​Harbor​​ 是由VMware公司开源的企业级的Docker Registry管理项目&#xff0c;它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。Harbor 的所有组件都在 Dcoker 中部署&#xff0c;所以 Harbor 可使用 Docker C…

Spark SQL— Catalyst 优化器

Spark SQL— Catalyst 优化器 1. 目的 本文的目标是描述Spark SQL 优化框架以及它如何允许开发人员用很少的代码行表达复杂的查询转换。我们还将描述Spark SQL如何通过大幅提高其查询优化能力来提高查询的执行时间。在本教程中&#xff0c;我们还将介绍什么是优化、为什么使用…

以太网PHY,MAC及其通信接口介绍

本文主要介绍以太网的 MAC 和 PHY&#xff0c;以及之间的 MII&#xff08;Media Independent Interface &#xff0c;媒体独立接口&#xff09;和 MII 的各种衍生版本——GMII、SGMII、RMII、RGMII等。 一&#xff1a;简介 从硬件的角度看&#xff0c;以太网接口电路主要由MA…

AXI-Stream——草稿版

参考自哔站&#xff1a;FPGA IP之AXI4-Lite AXI4-Stream_哔哩哔哩_bilibili 信号 传输层级从小到大 TKEEP和TSTRB共同决定了是哪种数据流

【idea快捷键】idea开发java过程中常用的快捷键

含义win快捷键mac快捷键复制当前行或选定的代码块Ctrl DCommand D通过类名快速查找类Ctrl NCommand N通过文件名快速查找文件Ctrl Shift NCommand Shift N通过符号名称快速查找符号&#xff08;类、方法等&#xff09;Ctrl Alt Shift NCommand Shift O跳转到声明C…