webpack 通过配置找到项目打包的入口(一般是js文件),根据代码中出现的 import require 之类的语句,解析出文件所需要依赖的资源模块,然后去解析每一个资源模块对应的依赖,最后得到一个依赖关系树。然后 webpack 会递归遍历这个依赖树,找到每个节点所对应的资源文件,然后根据配置文件中的 rules 属性找到模块对应的加载器,交给对应的加载器去加载这个模块,最后将打包后的结果放到 output 配置的目录文件中,实现整个项目的打包。另外webpack在编译打包的生命周期中还添加了很多钩子,可以在 webpack 生命周期的不同时期挂载钩子任务去实现我们想要的效果,例如很多自动化的工作可以借助一些封装好的 plugin ,plugin 就是在 webpack 的生命周期钩子上挂载对应的钩子函数。
Loader 是用于加载不同类型资源模块的加载器,是 webpack 实现资源模块化的基础。
Plugin 是用于完成除了资源模块加载之外的自动化的工作,例如,打包之前自动清除dist目录;自动拷贝不需要打包的资源文件到输出目录;压缩打包结果输出的代码。
Loader 导出一个函数,函数接收一个 source 参数,Loader 功能的实现就体现在函数中对于source 的处理。
plugin 通过钩子机制实现,webpack 会给项目打包的过程中分为很多个环结,再这些环节的中间可以添加一些额外的操作,扩展 webpack 的能力。webpack 要求插件必须是一个函数或者是一个包含 apply 方法的对象。一般都会把一个插件定义为一个类型,然后再这个类型中定义一个 apply 方法,使用的时候就是使用这个类型去构建一个实例。开发一个 plugin ,首先要找到我们要实现的功能是需要在生命周期的哪个阶段去进行,然后再对应的钩子函数中定义要执行的逻辑。
-
notes:笔记
-
code:编程题
-
explain.mp4:作业演示视频