webpack(三)loader

定义

loader用于对模块的源代码进行转换,在imporrt或加载模块时预处理文件
webpack做的事情,仅仅是分析出各种模块的依赖关系,然后形成资源列表,最终打包生成到指定文件中。
在这里插入图片描述

webpack内部,任何文件都是模块,不仅仅是js文件
默认情况下,遇到import或者require加载模块时,webpack只支持对jsjson文件的打包,像css、scss、png等这些类型的文件,webpack则无能为力,这时候就需要配置对应的loader进行文件内容的解析。
webpack碰到不识别的模块的时候,webpack会在配置当中查找该文件的解析规则。

使用

配置方式

  • 配置文件配置
    关于loader的配置,我们是写在module.rules属性中
    • rules是一个数组的形式,可以配置多个loader
    • 每一个loader对应一个对象的形式。test:正则表达式匹配规则;use:针对匹配到文件类型,调用对应的loader进行处理
  module: {rules: [// {//     test: /\.css$/, //正则表达式,用于匹配要处理的文件类型//     use: [//         {//             loader:'css-loader'//         }//     ]// },// { //简写 一个loader,不需要参数//     test:/\.css$/,//     loader:'css-loader'// }{test: /\.css$/,//  loader执行顺序从下往上,从右往左// use: ['css-loader','style-loader']// css-loader:处理css 由于webpack无法识别// style-loader:在页面上生成一个style标签 把处理好的样式添加到页面上use: ['style-loader', 'css-loader']}, {test: /.\less$/,// less-loader 需要less先将文件转为cssuse: ['style-loader', 'css-loader', 'less-loader']}]}
  • 内联方式配置:在每个 import 语句中显式指定 loader
 import 'css-loader!../css/login.css'
  • CLI配置:在 shell 命令中指定它们

特性

  • loader支持链式调用, 执行顺序从下往上,从右往左,链中的每个loader会处理之前已处理过的资源,最终变为js代码。
  • loader 可以是同步的,也可以是异步的
  • loader 运行在 Node.js 中,并且能够执行任何操作
  • 插件(plugin)可以为 loader 带来更多特性
    可以通过loader的预处理函数,为js生态系统提供更多能力。用户现在可以更加灵活的引入细粒度逻辑,例如:打包、压缩、语言翻译和其它更多特性。

常见loader

在页面开发过程中,加载除了js之外的内容就需要配置loader进行加载

css-loader

分析 css 模块之间的关系,并合成⼀个 css

npm install --save-dev css-loader
rules: [...,{test: /\.css$/,use: {loader: "css-loader",options: {// 启用/禁用 url() 处理url: true,// 启用/禁用 @import 处理import: true,// 启用/禁用 SourcemapsourceMap: false,//css在工作过程中又找到了需要处理的css,就需要往前找一个loader进行处理importLoaders:1 }}}
]

如果只通过css-loader加载文件,这时候页面代码配置没生效,因为css-loader只是负责将.css文件进行解析,并不会将解析后的css插入到页面中,如果我们希望再完成插入style的操作,那么我们还需要另外一个loader,就是style-loader.

style-loader

css-loader 生成的内容,用 style 标签挂载到页面的 head

npm install --save-dev style-loader
rules: [...,{test: /\.css$/,use: ["style-loader", "css-loader"]}
]

less-loader/scss-loader

npm install less-loader -D
rules: [...,{test: /\.css$/,use: ["style-loader", "css-loader","less-loader"]}
]

babel前置工具:browserslist

项目开发过程中需要考虑浏览器的兼容性,browserslist帮助我们请求会数据
可以从caniuse.com中查看目前浏览器的使用状态
两种配置方式:

// 方式一:package.json
"browserslist":[">1%","last 2 version","not dead"]
// 方式二:新建.browserslistrc文件
> 1%
last 2 versions
not dead

项目在安装webpack之后,会带有browserslist包,里面引入了caniuse-lite
在这里插入图片描述

postcss-loader前置:postcss

postcss是通过js转换css的工具
样式测试网站地址:https://autoprefixer.github.io/
如果我们不先试用loader而是利用postcss本身通过命令行进行自动添加前缀

  • npm i postcss-cli -D:能够在命令行使用
  • npm i autoprefixer -D:自动添加前缀

执行npx postcss --use autoprefixer -o ret.css ./src/css/test.css
在这里插入图片描述

postcss-preset-env:多css处理

如果我们的代码中还需要进行其它样式的处理,还需要单独配置,比如color:#12345678支持8位数,后面两位为rgba中的透明度,针对多css处理情况可以使用postcss-preset-env其中包含多个css处理,并且包含autoprefixer

{test: /\.css$/,//  loader执行顺序从下往上,从右往左// use: ['css-loader','style-loader']// css-loader:处理css 由于webpack无法识别// style-loader:在页面上生成一个style标签 把处理好的样式添加到页面上use: ['style-loader', 'css-loader', {loader: 'postcss-loader',options: {postcssOptions: {// plugins: [require('autoprefixer'),require('postcss-preset-env')]plugins: ['postcss-preset-env']}}}]},

我们项目中,less文件也可能需要用到这个配置,就可以抽离出来

//  postcss.config.js
module.exports = {plugins: [require('postcss-preset-env')// require('autoprefixer')]
}

webpack.config.js

use: ['style-loader', 'css-loader','postcss-loader','less-loader']

file-loader

rules: [...,{test: /\.(png|jpe?g|gif)$/,use: {loader: "file-loader",options: {// esModule:false,  不转为esModule// placeholder 占位符 [name] 源资源模块的名称// [ext] 源资源模块的后缀name: "[name]_[hash].[ext]",//打包后的存放位置outputPath: "./images",// 打包后文件的 urlpublicPath: './images',}}}
]

url-loader

可以处理理 file-loader 所有的事情,但是遇到图片格式的模块,可以选择性的把图片转成 base64 格式的字符串,并打包到 js 中,对小体积的图片比较合适,大图片不合适。

rules: [...,{test: /\.(png|jpe?g|gif)$/,use: {loader: "url-loader",options: {// placeholder 占位符 [name] 源资源模块的名称// [ext] 源资源模块的后缀name: "[name]_[hash].[ext]",//打包后的存放位置outputPath: "./images"// 打包后文件的 urlpublicPath: './images',// 小于 100 字节转成 base64 格式limit: 100}}}
]

asset module type

webpack5中内置了,不需要安装。在webpack5之前采用file-loader或者url-loader处理图片,在webpack5直接采用aeest进行处理即可。

asset/resource -->file-loader:发送一个单独的文件并导出 URL

output: {filename: 'bundle.js',path: path.resolve(__dirname, 'dist'),
+   assetModuleFilename: 'images/[hash][ext][query]' //导出文件名},
module: {rules: [{test: /\.png$/,type: 'asset/resource'}]}
// src/index.js
import icon from './assets/icon.png'
const iconImg = document.createElement('img')
iconImg.style.cssText = 'width: 200px;'
iconImg.src = icon
document.body.appendChild(iconImg)

执行webpack可以在dist中可以看到有一个.png文件出现

asset/inline–>url-loader:导出一个资源的 data URI

module.exports = {// ...module: {rules: [{test: /\.png$/,type: 'asset/resource',generator: {filename: 'images/[hash][ext][query]'}},
+     {
+       test: /\.svg$/,
+       type: 'asset/inline'
+     }]}
}

asset/source–>raw-loader:导出资源的源代码

module.exports = {// ...module: {rules: [{test: /\.png$/,type: 'asset/resource',generator: {filename: 'images/[hash][ext][query]'}},{test: /\.svg$/,type: 'asset/inline'},
+     {
+       test: /\.txt$/,
+       type: 'asset/source'
+     }]}
}

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

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

相关文章

健康舒适的超满意照明体验!SUKER书客SKY护眼台灯测评

健康舒适的超满意照明体验!SUKER书客SKY护眼台灯测评 2022年全国儿童青少年总体近视率为53.6%,其中6岁儿童为14.5%,小学生为36%,初中生为71.6%,高中生为81%,近视已成为当下人们遇到的比较普遍的眼健康问题…

qt连接tcp通信和连接数据库

通过数据库实现学生管理系统 widget.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//判断数据库对象是否包含了自己使用的数据库 Studemt.dbif(!db.co…

线性表之-单向链表(无头)

目录 什么是单向链表 顺序表和链表的区别和联系 顺序表: 链表: 链表表示(单项)和实现 1.1 链表的概念及结构 1.2单链表(无头)的实现 所用文件 将有以下功能: 链表定义 创建新链表元素 尾插 头插 尾删 头删 查找-给一个节点的…

没有软件怎么管理固定资产

在当今数字化的世界中,我们已经习惯了使用各种软件来管理我们的日常生活和工作。然而,当我们面临一个看似简单的问题——如何管理固定资产时,我们可能会感到困惑。那么,如果没有软件,我们该如何进行资产管理呢&#xf…

ClickHouse配置Hdfs存储数据

文章目录 背景配置单机配置HA高可用Hdfs集群性能测试统计trait最多的10个trait term统计性状xxx minValue > 500 0000的数量结论 参考文档 背景 由于公司初始使用Hadoop这一套,所以希望ClickHouse也能使用Hdfs作为存储 看了下ClickHouse的文档,拿Hdf…

【核心复现】基于改进灰狼算法的并网交流微电网经济优化调度(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

无涯教程-Flutter - 简介

Flutter是一个由谷歌开发的开源移动应用软件开发工具包,用于为Android、iOS、 Windows、Mac、Linux、Google Fuchsia开发应用。 通常,创建移动应用程序是一个非常复杂和具有挑战性的任务。有许多框架可用,它提供了开发移动应用程序的出色函数…

es倒排索引深入解读

文章目录 一. Lucene二.倒排索引算法2.1 Posting List压缩算法2.1.1 FOR2.1.2 RoaringBitmap压缩 2.3 FST压缩算法2.3.1 trie前缀树原理2.3.2 FST构建过程NFADFAFSMFSAFST:有限状态转换机构建原理FST在lucene中实现原理 1.什么是搜索引擎? 全文搜索引擎: 自然语言处理(NLP)、爬…

华为OD机试 - 等和子数组最小和 - 深度优先搜索(Java 2022 Q4 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷)》…

无涯教程-Android - Grid View函数

Android GridView在二维滚动网格(行和列)中显示项目,并且网格项目不一定是预定的,但它们会使用ListAdapter自动插入到布局中 Grid View - Grid view ListView 和 GridView 是 AdapterView 的子类,可以通过将它们绑定到 Adapter 来填充&#x…

flutter 上传图片并裁剪

1.首先在pubspec.yaml文件中新增依赖pub.dev image_picker: ^0.8.75 image_cropper: ^4.0.1 2.在Android的AndroidManifest.xml文件里面添加权限 <activityandroid:name"com.yalantis.ucrop.UCropActivity"android:screenOrientation"portrait"andro…

C#添加WebApi,配置Swagger

1、创建一个WebAPI项目 下载、安装、引入【Swashbuckle.AspNetCore】包 右击【解决方案】&#xff0c;然后点击【管理Nuget包】&#xff0c;搜索【Swashbuckle.AspNetCore】包 2、配置Swagger中间件 在【Startup.cs】文件中的【ConfigureService】类中添加如下代码。 在【Sta…

Spring AOP与静态代理/动态代理

文章目录 一、代理模式静态代理动态代理代理模式与AOP 二、Spring AOPSping AOP用来处理什么场景jdk 动态代理cglib 动态代理面试题&#xff1a;讲讲Spring AOP的原理与执行流程 总结 一、代理模式 代理模式是一种结构型设计模式&#xff0c;它允许对象提供替代品或占位符&…

肖sir__设计测试用例方法之边界值03_(黑盒测试)

设计测试用例方法之边界值 边界点定义 上点&#xff1a;边界上的点 离点&#xff1a;离上点最近的点&#xff08;即上点左右两边最邻近的点&#xff09; 内点&#xff1a;在域范围内的点 案例&#xff1a;qq号&#xff1a;5-12位 闭区间&#xff1a; 离点&#xff1a;5 位 &…

KC705开发板——MGT IBERT测试记录

本文介绍使用KC705开发板进行MGT的IBERT测试。 KC705开发板 KC705开发板的图片如下图所示。FPGA芯片型号为XC7K325T-2FFG900C。 MGT MGT是 Multi-Gigabit Transceiver的缩写&#xff0c;是Multi-Gigabit Serializer/Deserializer (SERDES)的别称。MGT包含GTP、GTX、GTH、G…

Calico IP In IP模拟组网

Calico IP In IP模拟组网 网络架构 模拟组网 先在k8s-master-1节点执行如下命令&#xff1a; # 创建veth-pair设备对ip link add veth1 type veth peer name eth0# 创建ns1网络命名空间ip netns add ns1# 将eth0网卡插入ns1网络命名空间ip link set eth0 netns ns1# 为ns1网…

CC-TDOB01 CC-TDIL01 有效地监控和管理热工设备

CC-TDOB01 CC-TDIL01 有效地监控和管理热工设备 新兴的互联工厂技术是霍尼韦尔启动其43的亮点注册营养师霍尼韦尔用户组(HUG)美洲研讨会&#xff0c;重点是向制造商展示数字化转型如何帮助他们实现更高水平的高性能。 来自石油和天然气、化工、纸浆和造纸以及金属和采矿行业的…

全国唯一一所初试考Java的学校!平均300分拿下

苏州科技大学 考研难度&#xff08;☆&#xff09; 内容&#xff1a;23考情概况&#xff08;拟录取和复试分析&#xff09;、院校概况、23专业目录、23复试详情、各专业考情分析、各科目考情分析。 正文1187字&#xff0c;预计阅读&#xff1a;3分钟 2023考情概况 苏州科技…

大数据组件Sqoop-安装与验证

&#x1f947;&#x1f947;【大数据学习记录篇】-持续更新中~&#x1f947;&#x1f947; 个人主页&#xff1a;beixi 本文章收录于专栏&#xff08;点击传送&#xff09;&#xff1a;【大数据学习】 &#x1f493;&#x1f493;持续更新中&#xff0c;感谢各位前辈朋友们支持…

19-springcloud(上)

一 微服务架构进化论 单体应用阶段 (夫妻摊位) 在互联网发展的初期&#xff0c;用户数量少&#xff0c;一般网站的流量也很少&#xff0c;但硬件成本较高。因此&#xff0c;一般的企业会将所有的功能都集成在一起开发一个单体应用&#xff0c;然后将该单体应用部署到一台服务器…