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.rhkb.cn/news/121020.html

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

相关文章

VBA技术资料MF52:VBA_在Excel中突出显示前 10 个值

【分享成果,随喜正能量】一言之善,重于千金。善良不分大小,有时候你以为的一句话,小小的举手之劳,也可能就是别人的救赎!不要吝啬你的善良,因为你永远不知道那小小的善良能给多少人带来光明。。…

大厂面试 | 百度一面,顶不住

题目来源:https://www.nowcoder.com/feed/main/detail/d39aabc0debd4dba810b4b9671d54348 前文 本期是【捞捞面经】系列文章的第 2 期,持续更新中…。(更多与往期下方仓库直达) 《捞捞面经》系列正式开始连载啦,据说看…

2023年7月婴幼儿辅食市场数据分析(京东商品数据)

随着人们对婴幼儿饮食健康的关注不断增加,市场对高品质、安全、营养丰富的辅食需求也日益旺盛。婴幼儿辅食市场增长放缓,但整体仍保持上升态势。鲸参谋数据显示,今年7月份,京东平台婴幼儿辅食市场的销量为1000万,同比增…

分布式环境下的数据同步

一般而言elasticsearch负责搜索(查询),而sql数据负责记录(增删改),elasticsearch中的数据来自于sql数据库,因此sql数据发生改变时,elasticsearch也必须跟着改变,这个就是…

NS2安装及入门实例——(ns2.35 / Ubuntu20.04)

文章目录 一、ns2安装1、更新系统源2、准备工作3、下载安装包4、安装5、问题① 问题1② 问题2③ 问题3 6、安装成功7、环境配置 二、nam安装1、安装2、问题 三、实例 一、ns2安装 1、更新系统源 sudo apt-get update sudo apt-get upgrade2、准备工作 sudo apt-get install …

5个强大的Java分布式缓存框架推荐

在开发中大型Java软件项目时,很多Java架构师都会遇到数据库读写瓶颈,如果你在系统架构时并没有将缓存策略考虑进去,或者并没有选择更优的缓存策略,那么到时候重构起来将会是一个噩梦。 在开发中大型Java软件项目时,很…

LeetCode 2511 最多可以摧毁的敌人城堡数目

LeetCode 2511 最多可以摧毁的敌人城堡数目 力扣题目链接:力扣题目链接 给你一个长度为 n ,下标从 0 开始的整数数组 forts ,表示一些城堡。forts[i] 可以是 -1 ,0 或者 1 ,其中: -1 表示第 i 个位置 没…

sql:SQL优化知识点记录(九)

(1)小表驱动大表 对sql调优的分析: 排序优化: 数据库的连接方式,里面的数据尽量这样连接,尽量选择第一个方式,因为两个表的连接一共建立5次连接,第二个建立1000次连接,从…

Matlab中fdatool结合STM32F4设计滤波器

数字滤波器的原理 1.从功能上分;低通、带通、高通、带阻。滤波器口诀:低通滤高频;高通滤低频;带通滤两边;带阻阻中间; 2.从实现方法上分:FIR、IIR 3.从设计方法上来分:Chebyshev(切比雪夫&…

准备HarmonyOS开发环境

引言 在开始 HarmonyOS 开发之前,需要准备好开发环境。本章将详细指导你如何安装 HarmonyOS SDK、配置开发环境、创建 HarmonyOS 项目。 目录 安装 HarmonyOS SDK 配置开发环境 创建 HarmonyOS 项目 总结 1. 安装 HarmonyOS SDK HarmonyOS SDK 是开发 Harmo…

Springboot 实践(13)spring boot 整合RabbitMq

前文讲解了RabbitMQ的下载和安装&#xff0c;此文讲解springboot整合RabbitMq实现消息的发送和消费。 1、创建web project项目&#xff0c;名称为“SpringbootAction-RabbitMQ” 2、修改pom.xml文件&#xff0c;添加amqp使用jar包 <!-- RabbitMQ --> <dependency&g…

电压互感器倍频感应耐压试验方法

试验方法 升压设备的容器应足够&#xff0c; 试验前应确认高压升压等设备功能正常&#xff1b; 按上图接好线&#xff0c; 三倍频发生器、 高压器外壳必须可靠接地。 将三倍频电源发生装置的输出线与被试电压互感器的一组二次绕组接线端连接好&#xff08;如 a-n 端&#xff0…

Spring MVC 五 - Spring MVC的配置和DispatcherServlet初始化过程

今天的内容是SpringMVC的初始化过程&#xff0c;其实也就是DispatcherServilet的初始化过程。 Special Bean Types DispatcherServlet委托如下一些特殊的bean来处理请求、并渲染正确的返回。这些特殊的bean是Spring MVC框架管理的bean、按照Spring框架的约定处理相关请求&…

2D项目经验总结

2D项目经验总结 前言地图的绘制Sprite Editor叠层注意点&#xff08;SortingLayer相关知识点&#xff09;Tile Paltette的使用Animated Tiles&#xff08;动起来的图片&#xff08;也称作瓷片或者瓦砖&#xff09;&#xff09; 玩家移动玩家方向的翻转刚体注意点 碰撞器输入系统…

手写Mybatis:第19章-二级缓存

文章目录 一、目标&#xff1a;二级缓存二、设计&#xff1a;二级缓存三、实现&#xff1a;二级缓存3.1 工程结构3.2 二级缓存类图3.3 二级缓存队列3.3.1 FIFI缓存策略3.3.2 事务缓存3.3.3 事务管理3.3.4 修改一级缓存 3.4 缓存执行器3.4.1 执行器接口3.4.2 执行器抽象基类3.4.…

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

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

企业电子招标采购系统源码java 版本 Spring Cloud + Spring Boot

项目说明 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&#xff0c;以及…

ARM编程模型-指令流水线

流水线技术通过多个功能部件并行工作来缩短程序执行时间&#xff0c;提高处理器核的效率和吞吐率&#xff0c;从而成为微处理器设计中最为重要的技术之一。 1. 3级流水线 到ARM7为止的ARM处理器使用简单的3级流水线&#xff0c;它包括下列流水线级。 &#xff08;1&#xff0…

机器人中的数值优化(五)——信赖域方法

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考&#xff0c;主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等&#xff0c;本系列文章篇数较多&#xff0c;不定期更新&#xff0c;上半部分介绍无约束优化&#xff0c;…

ubuntu22.04搭建verilator仿真环境

概述 操作系统为 Ubuntu(22.04.2 LTS)&#xff0c;本次安装verilator开源verilog仿真工具&#xff0c;进行RTL功能仿真。下面构建版本为5.008的verilator仿真环境。先看一下我系统的版本&#xff1a; 安装流程 安装依赖 sudo apt-get install git perl python3 make autoc…