当前位置: 首页 > web >正文

Webpack中的Loader详解

Loader 是 Webpack 中用于处理模块的转换器。它们可以将文件从一种格式转换为另一种格式,比如将 TypeScript 转换为 JavaScript,将 SCSS 转换为 CSS 等。使用 Loader,可以使 Webpack 处理各种类型的文件,而不仅仅是 JavaScript。

1. Loader基础

1.1. 基础使用

Loader 就像是一个翻译员,能把源文件经过转化后输出新的结果,并且一个文件还可以链式地经过多个翻译员翻译。

以处理 SCSS 文件为例:

1. SCSS 源代码会先交给 sass-loader 把 SCSS 转换成 CSS;

2. 把 sass-loader 输出的 CSS 交给 css-loader 处理,找出 CSS 中依赖的资源、压缩 CSS 等;

3. 把 css-loader 输出的 CSS 交给 style-loader 处理,转换成通过脚本加载的 JavaScript 代码;

可以看出以上的处理过程需要有顺序的链式执行,先 sass-loader 再 css-loader 再 style-loader。

以上处理Webpack相关配置如下:

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

1.2. Loader的职责

由上面的例子可以看出:一个 Loader 的职责是单一的,只需要完成一种转换。如果一个源文件需要经历多步转换才能正常使用,就通过多个 Loader 去转换。在调用多个 Loader 去转换一个文件时,每个 Loader 会链式的顺序执行,第一个 Loader 将会拿到需处理的原内容,上一个 Loader 处理后的结果会传给下一个接着处理,最后的 Loader 将处理后的最终结果返回给 Webpack。

所以,在你开发一个 Loader 时,请保持其职责的单一性,你只需关心输入和输出。

1.3. 常用Loader盘点

1.3.1. babel-loader

  • 作用:将 ES6+ 代码转换为 ES5。

  • 配置:

module.exports = {module: {rules: [{test: /\.js$/,exclude: /node_modules/,use: {loader: 'babel-loader',options: {presets: ['@babel/preset-env'],},},},],},
};

1.3.2. css-loader 和 style-loader

  • 作用:css-loader 解析 CSS 文件,style-loader 将 CSS 插入到 DOM 中。

  • 配置:

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

1.3.3. sass-loader

  • 作用:将 SCSS 文件转换为 CSS。

  • 配置:

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

1.3.4. file-loader

  • 作用:处理文件(如图片、字体),并返回其 URL。

  • 配置:

module.exports = {module: {rules: [{
http://www.xdnf.cn/news/14811.html

相关文章:

  • 用户行为序列建模(篇六)-【阿里】DSIN
  • 实战篇----利用 LangChain 和 BERT 用于命名实体识别-----完整代码
  • flask使用-链接mongoDB
  • Python爬虫-爬取汽车之家全部汽车品牌及车型数据
  • ListExtension 扩展方法增加 转DataTable()方法
  • Lua现学现卖
  • DOP数据开放平台(真实线上项目)
  • 电商返利APP架构设计:如何基于Spring Cloud构建高并发佣金结算系统
  • OpenLayers 下载地图切片
  • 解决cursor无法下载插件等网络问题
  • vue-29(创建 Nuxt.js 项目)
  • 从用户到权限:解密 AWS IAM Identity Center 的授权之道
  • 给定一个没有重复元素的数组,写出生成这个数组的MaxTree的函数
  • TDengine 如何使用 MQTT 采集数据?
  • lambda、function基础/响应式编程基础
  • [论文阅读] 软件工程 | 微前端在电商领域的实践:一项案例研究的深度解析
  • NLP中的同义词替换及我踩的坑
  • 创客匠人视角:创始人 IP 打造为何成为知识变现的核心竞争力
  • 【算法深练】单调栈:有序入栈,及时删除垃圾数据
  • 鸿蒙5:组件监听和部分状态管理V2
  • 为何需要防爆平板?它究竟有何能耐?
  • 【龙泽科技】新能源汽车故障诊断仿真教学软件【吉利几何G6】
  • 学习使用dotnet-dump工具分析.net内存转储文件(2)
  • vue-28(服务器端渲染(SSR)简介及其优势)
  • 舵机在不同类型机器人中的应用
  • Python 数据分析与可视化 Day 10 - 数据合并与连接
  • Linux的top指令CPU占用率详解(白话版)——Linux进阶常用知识点
  • 网络缓冲区
  • uni-app项目实战笔记26--uniapp实现富文本展示
  • 展开说说:Android之ContentProvider源码浅析