Vue学习杂记(五)——loader的使用

2023-10-27


引言:loader其实也是webpack系列的内容,考虑到webpack涉及知识点较多,因此分成两篇。

一、什么是loader?

    loader其实可以理解成webpack一个增强工具。webpack只能加载js,并且对于比较高级的ES7、ES8语法或者较新的react插件中使用的语法,webpack同样无能为力,需要使用loader系列中的babel来处理。一句话,你可以把loader理解成一个类似于webpack处理js的、能够处理css、less、jpg等多种前端需要用到的资源的工具。

二、loader处理css

    首先需要明白一点,在webpack里面,像css、jpg等都可以被称为模块,至于这些模块的加载,只要先后逻辑顺序没有问题,可以放到任何js文件中交给webpack作打包处理。
    安装与样式处理有关的loader:

npm  i style-loader@3.0.0 css-loader@5.2.6 -D

安装完成之后,需要在webpack.config.js的module.exports中新增如下代码:

module:{
	rules:[
		{
			test:/\.css$/,use:['style-loader','css-loader']
			//\用来转义,$表示以什么结尾(也就是匹配文件后缀)
		}
	]
}

说明:webpack对于代码处理当遇到css文件的时候,会先去查找是否安装了处理css的loader,如果没有直接报错,如果有,则先使用最后一个loader,然后使用逐渐向前使用直到使用完所有与之匹配的loader。例如,我们在index.js中引入index.css,由于webpack看到后缀不是js,于是会进入module的rules中进行正则匹配,如果通过了test正则规则,那么便从最后一个开始调用user数组里面的loader,依次调用完这些loader对代码进行打包处理。
    我们知道,css里面除了有.css文件,还有预编译的less文件。less其实和css差不多,less在使用上最大的特点是:能够嵌套使用css(就省得写一堆选择器了),举个例子:
在这里插入图片描述
less与css相比,less不仅能够嵌套使用样式选择器,降低各个选择器之间的耦合性,而且还封装对浏览器语法差异处理。但是,不足的是less属于一种预编译的css,实际使用时需要进行编译,这无疑增加了服务器的开销。说了这么多,咱就直接使用吧:
安装处理less的loader,并在module中添加相应规则:

npm i less-loader@10.0.1 less@4.1.1 -D
test:/\.less$/,use:['style-loader','css-loader','less-loader']
//再一次照应了前面提到的预编译和loader数组从最后开始使用,其次less是一个内置依赖项

三、loader处理图片

    我们知道,图片的引入是利用src属性实现的,而src中其实又包含有路径引入和base64引入。
    可能你忘记了前端对于图片的取舍处理,图片处理大概有三种方法:什么都不处理的url请求、图片转base64雪碧图。其中雪碧图和base64的想法一致,减少向服务器的请求次数优化性能。雪碧图,将多个小图片强行拼接成一个图片,请求时只需要请求一次,然后根据位置和大小设置扣除想要使用的那张图。base64,根据图片的数据传输,直接将图片解码放到src中,就不需要请求了。
    取舍关键之处:base64转码之后,得到的字符串比实际图片文件大小还大,也就是增加了内存。除此之外,还影响到CSSOM(css对象模型,有点类似于DOM,但只针对于css)的生成,在页面渲染时,base64会进入到css文件中,直接导致css文件增大,导致CSSOM生成时间增加,而CSSOM阻止任何东西渲染(简单来说就是CSSOM没有生成页面不会展示任何内容),导致页面可能存在一段较长时间的空白。主要是用与比较小的logo或者简单的icon类的图片。取舍的时候需要考虑到网速、服务器压力、用户体验等。
    好,回到loader上来,首先安装与图片相关的loader依赖:

npm i url-loader@4.1.1 file-loader@6.2.0 -D
//file-loader是url-loader的一个依赖项

接下来,同样新增对应规则:

test:/\.jpg|png|jpeg|gif$/,use:['url-loader?limit=3000']

说明:limit用来传递参数,如果图片大小<=3000字节,给定图片会被转化成base64数据,否则会返回本地服务器url。
    使用举例如下:

import tempImg from './images/t018a08fa7505a91e6e.jpg';
//tempImg在import之后返回base64的字符串
$(".img").attr('src',tempImg);

注意:这里使用的路径不能是网络路径。

四、loader处理高级的js语法

    这里给出一个js的装饰器语法,主要是为了介绍使用babel-loader插件,至于语法本身可以先不用深究,给出例子:
在这里插入图片描述
解决方法:

npm i babel-loader@8.2.2 @babel/core@7.14.6 @babel/plugin-proposal-decorators@7.14.5 -D

然后同样在配置文件中添加对应规则:

test:/\.js$/,use:['babel-loader'],exclude:'/node_modules/'

说明:exclude参数表示的是排除指定目录下的js文件,因为node_modules本身就是封装好的代码,我们只需要处理自己写的代码,这样也能提交加载效率。
    当然,除了配置这个,还不够,需要添加一个babel.config.js的配置文件,并添加如下内容:

module.exports={
  "plugins": [["@babel/plugin-proposal-decorators",{legacy:true}]]
}

    webpack对于JS高级语法的兼容处理,需要根据具体的语法类型配置babel.config.js。目前只需要知道对于高级语法webpack也可能无法处理,如果要做兼容需要用到babel-loader。

参考文献

    (1)【前端攻略】:玩转图片Base64编码

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue学习杂记(五)——loader的使用 的相关文章

随机推荐

  • Tomcat

    目录 一 Tomcat 的下载安装 二 启动 Tomcat 三 访问一下 Tomcat 的欢迎页面 四 Tomcat 的使用 tomcat 是 java 中最知名 最广泛使用的 HTTP 服务器 一 Tomcat 的下载安装 在浏览器中 搜
  • JS逆向必会基础案例

    动态网页爬虫一般可分为两种 Selenium爬取和接口爬取 两种方式各有优缺点 前者虽然可以很好地处理网页异步加载问题 但面对大型爬虫任务时 效率还是比较低的 后者虽然爬取速度较快 但请求参数很可能是动态变化的 这时就需要利用一些前端的知识
  • 计算机组成原理知识点总结——第三章存储系统

    目录 一 基本概念 二 半导体随机存储器 一 主存储器的基本组成 二 SRAM和DRAM 三 只读ROM芯片 三 主存储器与CPU的连接 一 主存容量扩展 四 双端口RAM和多模块存储器 一 双端口RAM 二 多模块存储器 五 磁盘存储器
  • 游戏设计之路——游戏设计文档详解(GDD)

    本文是我的 通关 游戏设计之道 的读书笔记 根据自己的理解对原文进行了归纳总结与改动 非常推荐大家去购买这本书 1 简介 1 1 什么是游戏设计文档 GDD 游戏设计文档 game design document GDD 是在游戏开发的筹备
  • vue3表格导出Excel(全网最细)​

    1 安装插件 npm install save xlsx 0 17 3 npm install save file saver 2 0 5 2 新建一个js文件夹放编写的js 在src下新建htmlToExcel js文件 然后再htmlT
  • CentOS 安装 opencv, 解决 Python cv2 module 问题(终极解决方法)

    下载安装包 wget https github com opencv opencv archive 2 4 13 zip 1 从官网下载 opencv 2 4 13 zip 2 执行安装 如果提示文件opencv 2 4 13 zip太大可
  • Java 随机读写流 复习题

    题目 在记事本中输入若干同学的姓名和成绩等信息作为原文件 编写一个Java源程序 其中的文件读写部分使用RandomAccessFile类来完成 程序实现的功能如下 编写一个包含主方法main的公共类 访问权限为public的类 主方法ma
  • Git从下载到配置到链接远程仓库全套教程

    目录 前言 一 Git的下载与安装 1 下载 2 安装 二 生成及配置SSH密钥 1 生成SSH密钥 2 配置SSH密钥 三 本地仓库与远程仓库连接并推送到远程仓库 总结 前言 每次进一个新公司都要下载配置git 这些东西也就配置那一次 所
  • pyqt 自定义信号,对默认信号触发的槽函数添加参数

    from PyQt5 QtCore import QObject pyqtSignal class QTypeSignal QObject sendmsg pyqtSignal object 使用pyqtSignal类实列发射信号 obje
  • Cuda

    文章目录 引言 一 Cuda安装 1 选择Cuda版本 2下载及运行安装程序 3 测试 二 Cudnn安装 1 进入官网下载对应cuda版本的cudnn 2 下载好相应版本并进行解压安装 3 解压完成后 4 测试 引言 学习的最大理由是想摆
  • Java知识点之Map(一)

    Map Map相关的内容在面试过程中都是一个重要的点 问深了会涉及到很多数据结构和线程相关的问题 你了解Map吗 常用的Map有哪些 Map是定义了适合存储 键值对 元素的接口 常见的Map实现类有HashMap Hashtable Lin
  • @RunWith注解的作用

    RunWith注解的作用 RunWith就是一个运行器 RunWith JUnit4 class 就是指用JUnit4来运行 RunWith SpringJUnit4ClassRunner class 让测试运行于Spring测试环境 Ru
  • 不容错过的Vue2.0组件开发

    简述 http www jianshu com p 313f11bccb33 utm source tuicool utm medium referral 本文针对于有Vue有一定基础的人学习了解 环境搭建等入门教程网上很多 大家自行学习
  • [ 注意力机制 ] 经典网络模型1——SENet 详解与复现

    Author Horizon Max 编程技巧篇 各种操作小结 机器视觉篇 会变魔术 OpenCV 深度学习篇 简单入门 PyTorch 神经网络篇 经典网络模型 算法篇 再忙也别忘了 LeetCode 注意力机制 经典网络模型1 SENe
  • 增程式电动汽车电控系统优化方法【matlab】

    一 主要内容 针对增程式电动汽车的传动系统架构 结合增程式乘用车和增程式电动公交的设计 对传动系统关键部件选型匹配以及电控系统工作模式进行论述 并论述了工况对行驶里程 以及电池充放电的影响因素 对通用汽车的Volt增程式电动汽车进行分析研究
  • B站价值60亿跨年晚会背后的微服务治理

    B站价值60亿跨年晚会背后的微服务治理 大家都知道微服务有两个痛点 一个是如何拆分微服务 微服务的边界怎么划分制定 二是微服务上了规模之后如何管理 因为只要上了规模 任何小小的问题都可能会被放大 最后导致雪崩效应 一 微服务化带来的挑战 上
  • 《Spring 5.x源码解析之Spring AOP 注解驱动使用及其实现原理》

    Spring 5 x源码解析之Spring AOP 注解驱动使用及其实现原理 学好路更宽 钱多少加班 mercyblitz 一 前言 大家好 欢迎阅读 Spring 5 x源码解析 系列 本篇作为该系列的第二篇 重点介绍Spring AOP
  • 离线搭建深度学习环境

    离线搭建深度学习环境 文章目录 离线搭建深度学习环境 Anaconda3离线安装 借助可联网PC下载安装包 安装Anaconda3 配置深度学习环境 获取深度学习环境 打包深度学习环境 拷贝深度学习环境 添加深度学习环境到环境列表 有时出于
  • Linux使用套接字 udp协议传输

    第一步是来认识库 需要哪些库 需要哪些库中的函数 哥们也只是 初学者 仅仅只是会调用的地步 后面有机会再加深 首先咱们需要清除的知道工作流程 第二步是直接写代码 开发工具 qtcreator6 环境 win10 虚拟机 ubuntu20 0
  • Vue学习杂记(五)——loader的使用

    Vue学习杂记 五 loader的使用 一 什么是loader 二 loader处理css 三 loader处理图片 四 loader处理高级的js语法 参考文献 引言 loader其实也是webpack系列的内容 考虑到webpack涉及