构建Webpack知识体系|青训营笔记

57 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第8天

1、为什么要学习Webpack?

1、理解前端“工程化”概念、工具、目标
2、一个团队总要有那么几个熟悉Webpack,某种程度上可以成为个人的核心竞争力
3、高阶前端必经之路

2、什么是Webpack

本质上是一种前端资源编译、打包工具
多份资源文件打包成一个Bundle
支持Babel,Eslint,TS,CoffeSoript,Loss,Sass
支持模块化处理css,图片等资源文件
支持HMR+开发服务器
支持持续监听,持续构建
支持代码分离

3、使用Webpack实例

1、.jpg

核心流程--极度简化版

2、.jpg 模块化+一致性
1、多个文件资源合并成一个,减少http请求数
2、支持模块化开发
3、支持高级JS特性
4、支持Typescript/CoffeScript/方言
5、统一照片、CSS、字体、等其它资源的处理模型

4、使用Webpack

关于Webpack的使用方法,基本都围绕“配置” 展开,而这些配置大致可以划分为两类:
流程类:作用于流程中某个或者若干给环节,直接影响打包效果的配置项
工具类:主流程之外,提供更多工程化能力的配置项
流程类配置

3.jpg 使用Webpack

5.jpg

工具类配置

image.png

因为配置太多了我们可以重点学习使用频率比较高的:

entry/output
module/plugins
 mode
watch/devServer/devtool

5、理解插件

什么是插件?为什么需要这么设计?

很多的知名工具都是所谓“插件”架构的 eg:

  • VScode、Webstorm、Chrome、Firefox
  • Babel、Webpack、Rollup、Eslint
  • Vue、Redux、Quill、Axios

如果没有使用“插件”架构,对于一个项目而言是不好的,缺点如下:

  • 新人需要了解整个流程细节,上手成本高
  • 功能迭代成本高,牵一发动全身
  • 功能僵化,作为开源项目而言缺乏成长性
  • Blaba

总结:

  • 心智成本高
  • 可维护性低
  • 缺少生命力 钩子的核心信息:
    1、时机:编译过程的特定节点,Webpack会以钩子形式通知插件此刻正在发生什么事情
    2、上下文:通过tapable提供的回调机制,以参数方式传递上下文的信息
    3、交互:在上下文参数对象中附带了很多存在side effect的交互接口,插件可以通过这些接口改变。