/fed-e-task-02-02

part2 module2 作业

Primary LanguageJavaScript

丁晓东 | Part 2 | 模块二

简答题

1、Webpack 的构建流程主要有哪些环节?如果可以请尽可能详尽的描述 Webpack 打包的整个过程。

webpack 通过配置找到项目打包的入口(一般是js文件),根据代码中出现的 import require 之类的语句,解析出文件所需要依赖的资源模块,然后去解析每一个资源模块对应的依赖,最后得到一个依赖关系树。然后 webpack 会递归遍历这个依赖树,找到每个节点所对应的资源文件,然后根据配置文件中的 rules 属性找到模块对应的加载器,交给对应的加载器去加载这个模块,最后将打包后的结果放到 output 配置的目录文件中,实现整个项目的打包。另外webpack在编译打包的生命周期中还添加了很多钩子,可以在 webpack 生命周期的不同时期挂载钩子任务去实现我们想要的效果,例如很多自动化的工作可以借助一些封装好的 plugin ,plugin 就是在 webpack 的生命周期钩子上挂载对应的钩子函数。

2、Loader 和 Plugin 有哪些不同?请描述一下开发 Loader 和 Plugin 的思路。

Loader 是用于加载不同类型资源模块的加载器,是 webpack 实现资源模块化的基础。

Plugin 是用于完成除了资源模块加载之外的自动化的工作,例如,打包之前自动清除dist目录;自动拷贝不需要打包的资源文件到输出目录;压缩打包结果输出的代码。

Loader 导出一个函数,函数接收一个 source 参数,Loader 功能的实现就体现在函数中对于source 的处理。

plugin 通过钩子机制实现,webpack 会给项目打包的过程中分为很多个环结,再这些环节的中间可以添加一些额外的操作,扩展 webpack 的能力。webpack 要求插件必须是一个函数或者是一个包含 apply 方法的对象。一般都会把一个插件定义为一个类型,然后再这个类型中定义一个 apply 方法,使用的时候就是使用这个类型去构建一个实例。开发一个 plugin ,首先要找到我们要实现的功能是需要在生命周期的哪个阶段去进行,然后再对应的钩子函数中定义要执行的逻辑。

项目文件说明

  • notes:笔记

  • code:编程题

  • explain.mp4:作业演示视频