Webpack知识体系|青训营笔记

132 阅读4分钟

这是我参与[第四届青训营]笔记创作活动的第十一天。

为什么要学习Webpack?

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

什么是Webpack

  • webpack主要是打包,所以其核心存在两个部分,入口和出口,你可以把webpack加工想象成香肠加工厂,就是活猪进去,香肠出来的那种,但是如果每次加工都需要员工亲力亲为,那多麻烦那,所以我们考虑到了自动化配置。webpack存在功能类似的配置文件,让webpack通过配置,全自动的执行我们需要的编译操作。
  • webpack分成四个部分,期中最核心的就是入口和出口,当然在入口和出口配置的同时我们还需要一些加载器和插件,这就是我们所谓的webpack配置文件。这个配置文件我们习惯把其命名为webpack.config.js ,还有webpackfile.js ,

总结一下,webpack共分为四个部分,这个概念一定要记好,本堂课就是围绕这四个配置进行展开的 :

  • 入口 * 出口 * 加载器 * 插件

本质上是一种前端资源编译、打包工具

  • 多份资源文件打包成一个 Bundle
  • 支持 Babel、Eslint、TS、CoffeScript、Less.
  • Sass
  • 支持模块化处理css、图片等资源文件一支持HMR+开发服务器-支持持续监听、持续构建
  • 支持代码分离
  • 支持Tree-shaking-支持Sourcemap

image.png

使用Webpack

image.png

核心流程

image.png

模块化+一致性 1 -多个文件资源合并成一个,减少http请求数

2 -支持模块化开发

3 -一支持高级JS特性

4 -支持 Typescript:CoffeeScript方言

5 -统一图片、css、字体等其它资源的处理模型

6 - Etc.. .

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

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

image.png

配置总览

按使用频率:

  • entry/output

  • 'module/plugins`

  • 'mode`

  • 'watch/devServer /devtool

image.png

处理CSS

image.png

接入Babel

image.png

生成HTML

image.png

自动生成HTML文件

const path = require(' path')
const HTMILWebpackPlugin = require( "html-webpack-plugin ")
module.exports ={
entry: '.lsrc/index',mode: "development",devtool: false,
output: {

filename: ' [name].js',
path: path.join(_ dirname, "./dist')},
plugins: [new HTMLWebpackPlugin(》]9

工具线

image.png

HMR

image.png

image.png

Tree-Shaking

Dead Code -代码没有被用到,不可到达 -代码的执行结果不会被用到 -代码只读不写

image.png

Tree-Shaking

-模块导出了,但未被其它模块使用

image.png

其他工具:

  • 缓存
  • Sourcemap
  • 性能监控
  • 日志
  • 代码压缩
  • 分包

image.png

理解Loader

为了处理非标准JS资源,设计出资源翻译模块——Loader用于将资源翻译为标准JS

使用loader

image.png

less-loader :实现less => cSs的转换

  • css-loader :将CSS包装成类似module.exp orts = “S{css]”的内容,包装后的内容符合JavaScript语法
  • style-loader:将css模块包进require语句,并在运行时调用injectStyle等函数将内容注入到页面的style标签

其它特性 image.png

特点:

  • 链式执行
  • 支持异步执行
  • 分normal、path两种模式

常见Loader

image.png

站在使用角度.建议掌握这些常见Loader的功能、配置方法

理解插件

image.png

这是一个特别复杂的过程,那么∶

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

心智成本高=>可维护性低=>生命力弱

插件架构精髓:对扩展开放,对修改封闭

Webpack本身的很多功能也是基于插件实现

插件围绕’钩子‘展开

image.png

钩子的核心信息∶

1.时机:编译过程的特定节点,Webpack 会以 钩子形式通知插件此刻正在发生什么事情;

  1. 上下文:通过tapable提供的回调机制,以参 数方式传递上下文信息;

3.交互:在上下文参数对象中附带了很多存在 side effect 的交互接口,插件可以通过这些接口改变

总结

  • Webpack 的作用
  • 理解Webpack配置结构,学习关键配置项
  • Loader 的作用与常用Loader
  • 插件基本形态与作用

学习方法

01.入门应用

  • 理解打包流程
  • 熟练掌握常用配置项、Loador、插件的使用方法,能够
  • 灵活搭建集成vue、React、Babal、Eslint、Less ,sass、图片处理等工具的Webpack环境
  • 掌握常见脚手架工具的用法,例如:Vue-cli、creato-react-epp.@angularfcli

02.进阶

  • 理解Londer.Plugin机制,能够自行开发Webpack组件
  • 理解常见性能优化手段。并能用于解决实际问题
  • 理解前端工程化概念与生态现状

03.大师级 阅读源码,理解Webpack编译,打包原理,甚至能够参与共建

知识点

image.png