Webpack 中 loader 的作用是什么?常用 loader 有哪些?

说说webpack中常见的Loader?解决了什么问题?- 题目详情 - 前端面试题宝典

1、loader 是什么 

loader是 webpack 最重要的部分之一。

通过使用不同的 loader,我们能够调用外部的脚本或者工具,实现对不同格式文件的处理。

loader 需要在 webpack.config.js 里单独用 module 进行配置。

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

在加载模块的时候,执行顺序如下: 

当 webpack 碰到不识别的模块的时候,webpack 会在配置的中查找该文件解析规则。

关于配置 loader 的方式有三种:

  • 配置方式(推荐):在 webpack.config.js 文件中指定 loader
  • 内联方式:在每个 import 语句中显式指定 loader
  • CLI 方式:在 shell 命令中指定它们

关于 loader 的配置,我们是写在 module.rules 属性中,属性介绍如下:

  • rules 是一个数组的形式,因此我们可以配置很多个 loader 

  • 每一个 loader 对应一个对象的形式,对象属性 test 为匹配的规则,一般情况为正则表达式

  • 属性 use 针对匹配到文件类型,调用对应的 loader 进行处理

代码编写,如下形式:

module.exports = {
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          { loader: 'style-loader' },
          {
            loader: 'css-loader',
            options: {
              modules: true
            }
          },
          { loader: 'sass-loader' }
        ]
      }
    ]
  }
};

从上述代码可以看到,在处理 css 模块的时候,use 属性中配置了三个 loader 分别处理 css 文件。

因为 loader 支持链式调用,链中的每个 loader 会处理之前已处理过的资源,最终变为 js 代码。

顺序为相反的顺序执行,即上述执行方式为 sass-loadercss-loaderstyle-loader

同一个任务的 loader 可以同时挂载多个,处理顺序为:从右到左,从下往上

因为 webpack 选择了 compose 这样的函数式编程方式,这种方式的表达式执行是从右向左的。

除此之外,loader 的特性还有如下:

  • loader 可以是同步的,也可以是异步的
  • loader 运行在 Node.js 中,并且能够执行任何操作
  • 除了常见的通过 package.json 的 main 来将一个 npm 模块导出为 loader,还可以在 module.rules 中使用 loader 字段直接引用一个模块
  • 插件(plugin)可以为 loader 带来更多特性
  • loader 能够产生额外的任意文件

可以通过 loader 的预处理函数,为 JavaScript 生态系统提供更多能力。用户现在可以更加灵活地引入细粒度逻辑,例如:压缩、打包、语言翻译和更多其他特性。

2、loader 作用

① 实现对不同格式文件的处理,比如将 Scss 转换为 CSS,或将 TypeScript 转化为Javascript;

② 可以编译文件,从而使其能够添加到依赖关系中

3、常用的 loader 

css-loader:  加载 CSS,支持模块化、压缩、文件导入等特性;

style-loader:将解析后的 css, 用 style 标签挂载到页面的 head 中;

如果只通过 css-loader 加载文件,这时候页面代码设置的样式并没有生效。

原因在于, css-loader 只是负责将 .css 文件进行一个解析,而并不会将解析后的 css 插入到页面中。如果我们希望再完成插入 style 的操作,那么我们还需要另外一个 loader,就是 style-loader

less-loader:   将 LESS 代码转换成 CSS

sass-loader:  将 SCSS/SASS 代码转换成 CSS

开发中,我们也常常会使用 lesssassstylus 预处理器编写 css 样式,使开发效率提高,这里需要使用 less-loadersass-loader

postcss-loader: 扩展 CSS 语法,使用下一代 CSS,可以配合 autoprefixer 插件自动补齐 CSS3 前缀;

raw-loader: 在 webpack 中通过 import 方式导入文件内容,该 loader 并不是内置的;

babel-loader把 ES6 转换成 ES5

eslint-loader通过 ESLint 检查 JavaScript 代码;

html-minify-loader: 压缩HTML

image-loader加载并且压缩图片文件

file-loader把文件输出到一个文件夹中,在代码中通过相对 URL 去引用输出的文件 (处理图片和字体);

url-loader与 file-loader 类似,区别是用户可以设置一个阈值,大于阈值会交给 file-loader处理,小于阈值时以 base64 的⽅式把⽂件内容注⼊到代码中去(处理图片和字体);

source-map-loader加载额外的 Source Map 文件,以方便断点调试

json-loader:用于加载 JSON 数据。

html-loader:处理 HTML 文件,可以将 HTML 文件中的图片和其他资源作为模块导入到 JavaScript 中。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Uniapp实现多语言切换

前言 之前做项目过程中,也做过一次多语言切换,大致思想都是一样的,想了解的可以看下之前的文章C#WinForm实现多语言切换 使用i18n插件 安装插件 npm install vue-i18n --saveMain.js配置 // 引入 多语言包 import VueI18n from vue-i18n…

王干娘和西门庆-UMLChina建模知识竞赛第4赛季第18轮

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 参考潘加宇在《软件方法》和UMLChina公众号文章中发表的内容作答。在本文下留言回答。 只要最先全部答对前3题,即可获得本轮优胜。 所有题目的回答必须放在同一条消息中&…

二十、泛型(3)

本章概要 构建复杂模型泛型擦除 C 的方式迁移兼容性擦除的问题边界处的动作 构建复杂模型 泛型的一个重要好处是能够简单安全地创建复杂模型。例如,我们可以轻松地创建一个元组列表: TupleList.java import java.util.ArrayList;public class TupleL…

简单工厂模式、工厂方法模式、抽象工厂模式

简介 将实例化代码提取出来,放到一个类中统一管理和维护,达到和主项目依赖关系的解耦,从而提高项目的扩展性和维护性。 工厂模式将复杂的对象创建工作隐藏起来,而仅仅暴露出一个接口供客户使用,具体的创建工作由工厂管…

51基于matlab模拟退火算法矩形排样

基于matlab模拟退火算法矩形排样,基于最低水平线算法完成矩形板材下料优化,输出最优剩料率和最后的水平线,可替换自己的数据进行优化,程序已调通,可直接运行。 51matlab模拟退火算法矩形排样 (xiaohongshu.com)

提升设备可靠性:人工智能(AI)在设备维护中的应用

当今社会,人工智能(AI)已从遥不可及的概念转变为现实,并被广泛地讨论和应用。AI技术已经渗透到各个领域,包括工业领域的设备维护。在现代工业领域,设备可靠性是企业持续运营和保持竞争力的关键因素之一。随…

正点原子嵌入式linux驱动开发——Linux Regmap驱动

在前面学习I2C和SPI驱动的时候,针对I2C和SPI设备寄存器的操作都是通过相关的API函数进行操作的。这样Linux内核中就会充斥着大量的重复、冗余代码,但是这些本质上都是对寄存器的操作,所以为了方便内核开发人员统一访问I2C/SPI设备的时候&…

【算法 | 模拟No.3】leetcode 38. 外观数列

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【Leetcode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…

技术分享 | app自动化测试(Android)--App 控件定位

客户端的页面通过 XML 来实现 UI 的布局,页面的 UI 布局作为一个树形结构,而树叶被定义为节点。这里的节点也就对应了要定位的元素,节点的上级节点,定义了元素的布局结构。在 XML 布局中可以使用 XPath 进行节点的定位。 App的布…

openGauss学习笔记-117 openGauss 数据库管理-设置数据库审计-查看审计结果

文章目录 openGauss学习笔记-117 openGauss 数据库管理-设置数据库审计-查看审计结果117.1 前提条件117.2 背景信息117.3 操作步骤 openGauss学习笔记-117 openGauss 数据库管理-设置数据库审计-查看审计结果 117.1 前提条件 审计功能总开关已开启。需要审计的审计项开关已开…

Java EE进阶2

包如果下载不下来怎么办? 1,确认包是否存在 2.如果包存在就多下载几次 3.如果下载了很多次都下载不下来,看看是不是下面几步出现了问题? 1)是否配置了国内源 settings.xml 2)目录是否为全英文,存在中文的话就修改路径 3)删除本地仓库的 jar 包,重新下载(可能由于网络的原…

大语言模型幻觉解决方案综述

论文题目:《Cognitive Mirage: A Review of Hallucinations in Large Language Models》 论文链接:https://arxiv.org/abs/2309.06794v1 论文代码:https://github.com/hongbinye/cognitive-mirage-hallucinations-in-llms 技术交流群 建了…

【QT】设置焦点及光标位置

很高兴在雪易的CSDN遇见你 ,给你糖糖 欢迎大家加入雪易社区-CSDN社区云 前言 本文分享Qt中如何设置焦点和光标位置的解决方案,并给出常见的问题解决方案,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(…

第19章_体系结构

文章目录 1. 逻辑架构剖析1.1 服务器处理客户端请求1.2 Connectors1.3 第1层:连接层1.4 第2层:服务层1.4.1 SQL Interface: SQL接口1.4.2 Parser: 解析器1.4.3 Optimizer: 查询优化器1.4.4 Caches & Buffers: 查询缓存组件 1.5 第3层&…

uniApp获取当前位置经纬度

以下是使用uni.getLocation获取当前位置的示例代码: 调用uni.getLocation方法获取当前位置信息 uni.getLocation({type: wgs84, // 坐标类型,默认为wgs84,可选的值为gcj02和bd09llsuccess: res > {// 获取成功,经度和纬度在r…

Java Spring Boot----ruoyi项目部署 前后端分离

nginx服务器部署java服务器部署db服务器部署配置打包环境配置前端打包环境(java服务器)配置后端打包环境获取代码 前端代码打包后端代码打包项目上线前端项目上线后端项目上线 将jar包传送到后端服务器导入初始化数据 ip主机名服务名称192.168.20.138ngi…

【pyspider】爬取ajax请求数据(post),如何处理python2字典的unicode编码字段?

情景:传统的爬虫只需要设置fetch_typejs即可,因为可以获取到整个页面。但是现在ajax应用越来越广泛,所以有的网页不能用此种爬虫类型来获取页面的数据,只能用slef.crawl()来发起http请求来抓取数据。 直接上例子: 可以…

webgoat-Request Forgeries 请求伪造

(A8:2013) Request Forgeries Cross-Site Request Forgeries 跨站请求伪造,又称一键攻击或会话骑乘,简称CSRF (有时发音为 sea-surf)或 XSRF,是一种恶意利用网站,其中传输未经授权的命令 来自网站信任的用…

【电路笔记】-并联RLC电路分析

并联RLC电路分析 文章目录 并联RLC电路分析1、概述2、AC的行为3、替代配置3.1 带阻滤波器3.2 带通滤波器 4、总结 电子器件三个基本元件的串联行为已在我们之前的文章系列 RLC 电路分析中详细介绍。 在本文中,介绍了另一种称为并联 RLC 电路的关联。 在第一部分中&a…

浅析刚入门Python初学者的注意事项

文章目录 一、注意你的Python版本1.print()函数2.raw_input()与input()3.比较符号&#xff0c;使用!替换<>4.repr函数5.exec()函数 二、新手常遇到的问题1、如何写多行程序&#xff1f;2、如何执行.py文件&#xff1f;3、and&#xff0c;or&#xff0c;not4、True和False…