认识Webpack | 青训营笔记

49 阅读2分钟

这是我参与【第五届青训营】笔记创作活动的第十一天

2023.02.09

01.什么是Webpack

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

02.使用Webpack

  • 安装
  • 编辑配置文件
  • 执行编译命令

核心流程:

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

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

  • 流程类:作用于流程中某个or若干个环节,直接影响打包效果的配置项。
    • 流程类配置:输入('entry' 'context');模块解析('resolve' 'externals');模块转译('module');后处理('optimization' 'mode' 'target')
  • 工具类:主流程之外,提供更多工程化能力的配置项。

接入Babel:

  • 安装依赖
  • 声明产物出口'output'
  • 执行'npx webpack'

03.理解Loader

问题:Webpack只认识JS

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

使用Loader:

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

04.理解插件

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