Q2.2- webpack的核心配置含义2

203 阅读2分钟

1 Loader 和 Plugin 含义

Q1 Webpack 中的 Loader 和 Plugin 是什么

A:

1.1 Loader 含义和作用:

  • 本质上是一个 transformer转换器,主要用于 处理文件的转换和加载

  • 它是一个纯函数,接收源文件内容,输出 转换后的结果

  • 因为webpack 默认只支持 JS 和 JSON 类型的文件,通过Loader,就可以让其他类型的文件 被转换为 JS模块,从而能够被 webpack 处理

1.2 Loader的特点

  • 可以被链式调用,从后往前执行
  • 支持同步和异步执行
  • 模块化,一个 loader 只做一件事==> 纯函数特点1
  • 无状态,每次运行都独立于其他编译结果==> 纯函数特点2

2.1 Plugin 含义和作用:

  • 本质上是一个 EventListener事件监听器
  • 它是一个带有 apply 方法的类,该方法 会接收一个 compiler 对象
  • 它可以通过事件钩子,介入到 webpack的 各个编译周期过程中,执行各种 自定义拓展任务

2.2 Plugin 的特点

  • 基于事件流框架 Tapable,可以在 webpack 不同生命周期中挂载任务
  • 支持异步操作,通过 callback 或返回 Promise

2 Loader 和 Plugin 的区别

Q1 Webpack 中的 Loader 和 Plugin 的区别是什么

A:

S1 功能范围不同

  • loader: 主要负责 文件的转换/ 预处理
  • plugin: 可以通过暴露的钩子函数,执行各种扩展任务

S2 执行时机不同

  • loader: 主要在 模块解析和构建阶段 执行
  • plugin: 在 webpack运行的 不同生命周期阶段 执行,如启动(run)、编译(compile)、生成(emit)、完成(done)等多个阶段

S3 运行机制不同

  • Loader 是单向链式调用,按照配置从后往前执行,上一个 Loader 的结果会传给下一个 Loader
  • Plugin 是基于事件机制工作,可以监听整个生命周期,在多个事件点上同时工作

S4 抽象层次不同

  • loader: 在文件级别工作,处理单个资源文件
  • plugin: 在编译级别工作,影响整体构建流程

选择用 loader 还是 plugin的 直观判断依据

  • 如果需要 转换/预处理 某种类型的文件,使用 loader
  • 如果需要 影响整个构建过程,使用 plugin

即 loader是 “文件级别的 转化器”,plugin是 “构建过程的 扩展器”

参考文档

01-你真的搞懂webpack loader和plugin的区别了吗

02-webpack的loader和plugin有什么区别

03-珠峰-webpack基础含义与常用配置1

04-珠峰-webpack基础含义与常用配置2