Webpack | 青训营笔记

65 阅读2分钟

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

Webpack

为什么要学习Webpack

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

什么是Webpack

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

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

image.png

Webpack打包核心流程

  • 安装

image.png

  • 编辑配置文件

image.png

  • 执行编译命令

image.png

image.png

  • 模块化+一致性
    • 多个个文件资源合并成一个,减少http请求次数
    • 支持模块化开发
    • 支持高级JS特性
    • 支持 Typescript、CoffeeScript方言
    • 统一图片、CSS、字体等其它资源的处理模型
    • Etc……
  • 关于Webpack的使用方法,基本都围绕“配置”展开,而这些配置大致可划分为两类:
    • 流程类:作用于流程中某个 or 若干个环节,直接影响打包效果的配置项
    • 工具类:主流程之外,提供更多工程化能力的配置项
  • 配置总览
    • ‘entry/output’
    • ‘module/plugins’
    • ‘mode’
    • ‘watch/devServer/devtool’

image.png

Loader组件

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

image.png

  • less-loader : 实现less => css的转换
  • css-loader : 将CSS包装成类似module.exports = "${css}"的内容,包装后的内容符合JavaScript语法
  • style-loader : 将css模块包进require语句,并在运行时调用injectStyle等函数将内容注入到页面的style标签 loader其他特性
  • 链式执行
  • 支持异步执行
  • 分normall、pitch两种模式

image.png 常见Loader

image.png

Plugin组件

钩子的核心信息

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