Webpack知识体系 | 青训营笔记

60 阅读3分钟

青训营笔记.png

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

一、重点内容介绍:

1、什么是Webpack?
2、Webpack打包核心流程
3、如何使用Webpack

二、详细知识点

1、什么是Webpack?

  • 前端项目由资源构成(PNG、WEBP、GIF、JS、TS、Less、Vue、JSX、Sess...)
  • 而在早期的前端开发过程中,我们需要手动管理这些资源,往往会产生很多问题
  • Webpack本质上是一种前端资源译、打包工具。
  • Webpack会分析模块之间的依赖关系,然后使用loaders处理它们。
  • 最后生成一个优化并合并后的静态资源。

2、Webpack打包核心流程?

打包核心流程:

  • 入口处理
    • 从entry文件开始,启动编译流程
  • 依赖解析
    • 从entry文件开始,根据require or import等语句找到依赖资源
  • 资源解析
    • 根据module配置,调用资源转移器,将png、css等非标准JS资源转译为JS内容
  • 资源合并打包
    • 将转译后的资源内容合并打包为可直接在浏览器运行的JS文件
  • 递归调用2、3,直到所有资源处理完毕

模块化+一致性

  • 多个文件资源合并成一个,减少http请求数
  • 支持模块化开发
  • 支持高级JS特性
  • 支持Typescript、 CoffeeScript方言
  • 统一图片、CSS、字体等其他资源的处理模型
  • Etc……

3、如何使用Webpack

关于webpack使用方法,基本都围绕“配置”展开,而这些配置大致可划分为两类:

  • 流程类:作用于流程中某个 or 若干个环节,直接影响打包效果的配置项
  • 工具类:主流程之外,提供更多工程化能力的配置项

使用webpack

  • 使用webpack——处理css
  • 使用webpack——接入babel
  • 使用webpack——生成HTML
  • 使用webpack——hmr
  • 使用webpack——tree-shaking
  • 使用webpack——工具栈

什么是Loader

  • 为了处理非标准JS资源,设计出资源翻译模块————Loader
  • 作用:将资源转换成标准JS
  • 使用:安装Loader、添加‘module’处理css文件。
  • 特点:
    链式执行
    支持异步执行
    分normal、pitch两种模式

进阶:理解插件

  • 很多知名工具,如VS Code、Web Storm、Chrome、Firefox等等,都设计了所谓“插件”架构,为什么?
  • 新人需要了解整个流程细节,上手成本高。功能迭代成本高,牵一发动全身。功能僵化,作为开源项目而言缺乏成长性。
  • 插件架构精髓:对扩展开放,对修改封闭。
  • 甚至,Webpack 本身的很多功能也是基于插件实现的。

钩子的核心信息

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

小结

通过今天的学习,我了解了很多关于Webpack打包工具的知识。
我知道了Webpack之所以诞生和他用于解决的痛点问题。
同时学习了如何使用Webpack进行打包。