Webpack 什么是loader?什么是plugin?loader与plugin区别是什么?

Webpack中Loader和Plugin的区别 LoaderLoader 是用于处理和转换模块的工具。它将非 JavaScript 文件(如 CSS、图片、TypeScript 等)转换为可以被 JavaScript 处理的模块。主要用于文件的预处理和转换。PluginPlugin 是用于扩展 Webpack 功能的工具,可以在构建过程中执行各种任务,如优化构建、管理输出文件、注入环境变量等。主要用于执行更复杂的操作和构建过程的管理。Loader 和 Plugin 是 Webpack 中不可或缺的两个组件。 阅读详情

什么是loader?什么是plugin?

  • loader 本质为一个函数,将文件编译成可执行文件。webpack完成的工作是将依赖分析与tree shinking对于类似.vue或.scss结尾的文件无法编译理解这就需要实现一个loader完成文件转译成js、html、css、json等可执行文件。
  • plugin可以是函数或Class(es6),通过订阅webpack串行流程上的事件,实现扩展webpack功能,改变webpack输出结果。

区别:

  1. 执行时机不同。loader主要是倒序执行,从后往前将一个loader的输出作为它前一个loader的输入,直到运行完所有loader;plugin执行执行时机在与通过订阅webpack串行流程上的事件,当webpack运行到对应订阅事件时执行,可以运行在整个生命周期内。两者都可以同步或者异步执行。
  2. 侧重功能不同。loader主要完成文件操作;plugin主要是实现除loader以外功能,扩展webpack功能。
  3. 配置方式不同。loader配置到module.rules,rules是一个数组,每一个元素是一个对象,每个对象包含属性test(检验目标文件类型)、use:(loader数组,从后往前执行)、options(配置);plugin放在plugins数组中通过new 关键字创建。
  4. 书写方式不同。

​ loader编写伪代码如下

/**
 * 定义一个loader
 * 1.不可为一个箭头函数,Webpack运行时需要指定运行this为Webpack,所以可以调用内置api
 * 2.可以异步返回使用this.callback
 * 3.配置的options可以使用this.query获取
 * @param source 模块文件源数据内容
 * @return {*}
 */
module.exports = function (source) {

  // 如果 loader 配置了 options 对象,那么this.query将指向 options
  const options = this.query;

  const doTask = async (source) => {
    //伪代码进行数据转换
    const content = await source2Something(source,options)
    /*
    * this.callback 参数:
    * error:Error | null,当 loader 出错时向外抛出一个 error
    * content:String | Buffer,经过 loader 编译后需要导出的内容
    * sourceMap:为方便调试生成的编译后内容的 source map
    * ast:本次编译生成的 AST 静态语法树,之后执行的 loader 可以直接使用这个 AST,进而省去重复生成 AST 的过程
    */
    this.callback(null, content)
  }

  //异步返回结果
  doTask()
  //同步返回
  return source2Something(source,options)
}

​ plugin编写伪代码如下

/**
 * 定义一个plugin
 * 1.需要通过new创建可以使用class创建
 * 2.内部需要有一个方法apply调用运行插件功能
 * 
 * 具体可以看
 * https://webpack.docschina.org/contribute/writing-a-plugin/#basic-plugin-architecture
 */

class MyPlugin {
  //创建时可以传入参数
  constructor(options) {
    this.options = options;
  }

  /**
   * 通过compiler获取 webpack 内部的钩子,获取 webpack 打包过程中的各个阶段
   * 钩子分为同步和异步的钩子,异步钩子必须执行对应的回调
   * @param compiler
   */
  apply(compiler){
    //同步hook 最后调用tap
    //emit为hook事件名称
    compiler.hooks.emit.tap('MyPlugin',compilation=>{

      //do somethings
      //do somethings
      //do somethings

    })
    //异步hook 最后调用tapAsync、tapPromise
    //done为hook事件名称
    //tapAsync 异步钩子必须执行对应的回调
    //tapPromise 需要返回Promise
    compiler.hooks.done.tap('MyPlugin', (compilation, callback) => {
      console.log("打包已完成");

      //do somethings
      //do somethings
      //do somethings

      callback();
    })
  }

}

Webpack Loader 和 Plugin 的核心区别详解 Loader是专注于文件转换的模块加载器,在module.rules中配置,负责将各种文件转换为Webpack可处理的模块。而Plugin是通过Webpack生命周期钩子扩展功能的组件,在plugins数组中配置,可以执行更广泛的任务如资源优化、环境变量注入等。 阅读详情

相关推荐

保姆级教程:用STM32CubeMX HAL库搞定ESP8266连接,附串口printf调试全流程

本文提供了一份详细的STM32CubeMX HAL库教程,指导开发者如何实现ESP8266无线模块的连接与调试。从开发环境搭建、串口配置到AT指令通信解析,涵盖了物联网开发中的关键步骤和常见问题解决方案,帮助开发者快速掌握STM32与ESP8266的集成技术。

weixin_28273593的博客 504

Webpack中常见的loader和plugin

Webpack中常见的loader和plugin

m0_67182997的博客 1685

MLX90640 热成像 STM32

MLX90640 热成像

zhaocundang's blog 5007

Webpack中Loader和Plugin

通过学习Webpack的编译阶段及其生命周期,我们了解到可以选择合适的阶段自定义loader 和 plugin来满足自身业务需求,并将其应用于项目中。

qq_29579625的博客 1555

IsaacGym四足机器人sim to real全过程详细解析(walk these ways方法)

本文使用强化学习的方法运行到Aliengo机器人上完成从训练到部署的全过程。该方法使用的是GO1机器人提供了完整的sim to real代码和遥控器控制代码,所以我们只需要重新训练和部署健康就可以使用在Aliengo上。该方法使用lcm进行通讯首先程序通过UDP和机器人控制板进行通讯获取机器人状态并下达指令。然后又通过lcm进行机器人状态信息的发布和模型命令的获取。

weixin_44061195的博客 2万+

【纯血鸿蒙】安装hdc工具

参考资料:

oh.K 5554

loader 和 plugin

loader 和 plugin 的区别

weixin_42050406的博客 532

Matplotlib图片尺寸调整全攻略:从figsize到savefig的实战技巧

在数据可视化与科学计算中,图形尺寸控制是影响图表可读性与专业度的基础环节。其核心原理在于协调逻辑尺寸(英寸)与物理输出(像素)的映射关系,这直接决定了信息呈现的清晰度与布局合理性。从技术价值看,精准的尺寸控制能提升图表在不同媒介(如学术论文、报告、网页)中的适配性,避免显示不全、模糊失真等常见问题。在应用场景上,无论是Jupyter Notebook中的交互探索、自动化报告的批量生成,还是满足严格出版要求的插图制作,都需要掌握对应的尺寸调整策略。本文聚焦于matplotlib中的figsize参数、rcPa

weixin_30899023的博客 330

说说Loader和Plugin的区别?编写Loader,Plugin的思路?

对于loader,实质是一个转换器,将A文件进行编译形成B文件,操作的是文件,比如将A.scss或A.less转变为B.css,单纯的文件转换过程。在Webpack 运行的生命周期中会广播出许多事件,Plugin 可以监听这些事件,在合适的时机通过Webpack提供的 API改变输出结果。由于webpack基于发布订阅模式,在运行的生命周期中会广播出许多事件,插件通过监听这些事件,就可以在特定的阶段执行自己的插件任务。一般在编写loader的过程中,保持功能单一,避免做多种功能。

林恒的博客 1173

第4篇:使用 NModbus 库快速搭建 Modbus TCP 通信(从零开始用 C# 开发 Modbus 上位机)

本文介绍了如何使用 NModbus 库快速搭建 Modbus TCP 上位机通信程序。通过安装 NModbus4 NuGet 包,开发者可以轻松实现 Modbus TCP 连接,无需手动处理底层协议细节。文章详细演示了核心功能实现: 创建 TCP 客户端连接设备 读取保持寄存器(功能码0x03) 写入单个寄存器(功能码0x06) 关闭连接释放资源 提供完整C#示例代码,包含初始化连接、数据读写等关键操作,帮助开发者快速构建Modbus TCP通信应用。相比手动实现,NModbus库大幅简化了开发流程,特别适

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1045

【SpringBoot 4.x 第2节】夯爆了,学习 Spring Boot 4.x 前,需要具备哪些 Java 基础?

🏆 本文收录于 《滚雪球学 Spring Boot 4.x》 专栏。 本专栏面向 有一点 Java 基础,但没有系统学过 Spring Boot 的读者,采用“滚雪球式学习法”:先跑通、再理解、再重构、再上线,最终带你从第一个 Hello API 一路完成一个可部署、可监控、可扩展的后端项目。

**My Coding Family** 4569

Webpack的Loader和Plugin

1.总类型前置loader普通loader内联loader后置loader2.默认类型默认为normal类型3.修改类型配置时可以通过enforce修改类型。Plugin在Webpack工作流程插入操作来扩展Webpack功能。

qq_37464878的博客 2842

【从零开始学习SLAM】官方tf教程小海龟跟随程序

ros tf 进行坐标系之间转换的运算和发布

小秋 AI SLAM 入门实战教程 2033

Webpack Loader 和 Plugin 的区别详解

Webpack Loader 和 Plugin 的区别主要体现在:Loader 是文件转换器,用于处理单个模块(如转换CSS、TypeScript等),它以链式方式作用于文件内容;而 Plugin 是功能扩展器,通过生命周期钩子影响整个构建流程(如资源优化、文件生成等)。Loader 本质上是转换函数,Plugin 则是具有apply方法的类。Loader 在模块解析阶段执行,Plugin 在整个构建过程的不同阶段触发。二者协同工作,共同完成Webpack的构建任务。

在所有的事情背后,要有一颗坚定的的本心,要有一颗应对变革和提升自我的本心,世界瞬息万变,本心要坚持到底,保持学习,时刻复盘 1767

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

webpack 中 loader 和 plugin 的区别是什么

webpack 中 loader 和 plugin 的区别是什么 loader,它是一个转换器,将A文件进行编译成B文件,比如:将A.less转换为A.css,单纯的文件转换过程。 plugin是一个扩展器,它丰富了webpack本身,针对是loader结束后,webpack打包的整个过程,它并不直接操作文件,而是基于事件机制工作,会监听webpack打包过程中的某些节点,执行广泛的任务 loader: webpack自身只支持js和json这两种格式的文件,对于其他文件需要通过loader将其转换为

weixin_45087659的博客 7262

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

webpack中loader和plugin的区别

本文详细解析了Webpack中Loader和Plugin的核心区别。Loader用于转换模块源代码,作用于单个文件,如babel-loader转换ES6代码;Plugin扩展Webpack功能,作用于整个构建流程,如HtmlWebpackPlugin生成HTML文件。关键差异包括:Loader处理文件内容,配置在module.rules中;Plugin操作编译过程,通过plugins数组注册。文章还列举了常用Loader和Plugin,强调二者配合使用才能构建高效前端工程体系。

xuehao1997的博客 783

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

前端面试题:webpack中loader和plugin的区别

一、从功能作用的角度区分: 1、loader: loader从字面的意思理解,是加载的意思。 由于webpack 本身只能打包commonjs规范的js文件,所以,针对css,图片等格式的文件没法打包,就需要引入第三方的模块进行打包。 loader虽然是扩展了 webpack ,但是它只专注于转化文件(transform)这一个领域,完成压缩,打包,语...

jiang7701037的博客 1万+

webpack构建之loader与plugin的区别是什么

在webpack中,loader和plugin是俩个关键的部分,常常被面试官拿来比较他们,那么他们到底有什么区别呢? loader loader是文件加载器,能够加载资源文件,并对这些文件进行统一处理,诸如编译、压缩等,最终一起打包到指定的文件中。处理一个文件可以使用多个loader,loader的执行顺序和配置中的顺序正好相反,也就是说最后一个loader最先执行,第一个loader最后执行。第一个执行的loader的返回值接收源文件内容作为参数,其他loader接收前一个执行的loader的返回值作

lee前端技术站 2700

webpack loader和plugin的区别

本文主要总结了webpack的常见面试题及webpack中的重要概念,webpack loader 和 plugin 的区别。分别从产生的原因,解决了什么问题,作用的point和作用的时间范围说明了两者的不同。 为了方便理解,还列举了常用的loader和plugin。

weixin_38552195的博客 1993

webpack的loader和plugin的区别

面试题:你了解webpack原理么?你项目中用webpack做了哪些配置?loader和plugin有什么区别?项目中用到哪些loader? 【Loader】:用于对模块源码的转换,loader描述了webpack如何处理非javascript模块,并且在buld中引入这些依赖。loader可以将文件从不同的语言(如TypeScript)转换为JavaScript,或者将内联图像转换为data URL。比如说:CSS-Loader,Style-Loader等。 loader的使用很简单: 在webpac.

qq_42907443的博客 2060

webpack loader plugin 的区别

plugin :webpack打包过程中会埋一些事件钩子,例如emit,afteremit等等,plugin就是实现这些钩子,扩展webpack的能力,一般来说loader能做的,plugin都有对应的生命周期可以处理。loader 主要功能是告诉webpack如何加载一个一个资源,例如我们常用的vue-loader,就是告诉webpack,一个vue文件如何转化成对应的js文件;再如less-loader,告诉webpack,如何对引入的是文件里面图片资源进行加载,是按base64加载呢还是其方式?...

hongkid的专栏 696

webpack中Loader和Plugin的区别、编写Loader,Plugin的思路、

webpack中Loader和Plugin的区别、编写Loader,Plugin的思路

thewar196的博客 514
上一篇: js为什么是单线程?
子言慕雨
博客等级 码龄9年 15粉丝 140原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值