基础概念

整体流程

  1. 利用babel完成代码转换,并生成单个文件的依赖

  2. 从入口开始递归分析,并生成依赖图谱

  3. 将各个引用模块打包为一个立即执行函数

  4. 将最终的bundle文件写入bundle.js中

Loader

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

概念:

  • 一个Loader 的职责是单一的,只需要完成一种转换

  • 一个Loader 其实就是一个Node.js 模块,这个模块需要导出一个函数

Plugin

专注处理 webpack 在编译过程中的某个特定的任务的功能模块,可以称为插件

概念:

  • 是一个独立的模块

  • 模块对外暴露一个 js 函数

  • 函数的原型 (prototype) 上定义了一个注入 compiler 对象的 apply 方法 apply 函数中需要有通过 compiler 对象挂载的 webpack 事件钩子,钩子的回调中能拿到当前编译的 compilation 对象,如果是异步编译插件的话可以拿到回调 callback

  • 完成自定义子编译流程并处理 complition 对象的内部数据

  • 如果异步编译插件的话,数据处理完成后执行 callback 回调。

Tapable & Tapable 实例

webpack 的插件架构主要基于 Tapable 实现的,Tapable 是 webpack 项目组的一个内部库,主要是抽象了一套插件机制。它类似于 NodeJS 的 EventEmitter 类,专注于自定义事件的触发和操作。 除此之外, Tapable 允许你通过回调函数的参数访问事件的生产者。

最后更新于