webpack | 青训营笔记

78 阅读3分钟

[这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天]

1. 什么是webpack

  • 本质上是一种前端资源编译(将非标准的 js 文件编译成标准的 js 内容,比如 ts 等)、 打包工具
  • 特点
    • 多份资源文件打包成一个 Bundle, 减少 Http 请求数
    • 支持 Babel 、 Eslint 、 TS 、 CoffeeScript 、 Less 、 Sass
    • 支持模块化处理 css、图片等资源文件
    • 支持XMR + 开发服务器
    • 支持持续监听、 持续构建
    • 支持代码分离

2. 使用 webpack

  • 安装依赖 npm i -D webpack webpack-cli
  • 在 webpack.config.js 中配置文件
    • image.png
  • webpack 配置属性
    • entry: 配置 webpack 的入口文件
    • output: 配置 webpack 打包的出口目录
  • webpack核心流程---极度简化版
    • 入口处理: 从 entry 文件开始,启动编译流程
    • 依赖解析: 从 entry 文件开始,根据 require or import 等语句找到资源依赖
    • 资源解析: 根据 module 配置,调用资源转移器,将 png、css 等非标准 js 资源编译为 js 内容
    • 资源合并打包: 将转译后的资源内容合并打包为可直接在浏览器中运行的 js 文件
    • 在上述过程中,webpack 为递归调用第 2, 3 两步,直到所有的资源全部处理完毕

3. webpack 的配置项

  • 流程类
    • 作用于流程中某个或多个环节,直接影响打包效果的配置项
    • 输入
      • entry
      • context
    • 模块解析
      • resolve
      • externals
    • 模块转译
      • module
        • 处理 loader
        • image.png
    • 后处理
      • optimization
      • mode
        • 如果设置为 production 那么产物会压缩
      • target
  • 工具类
    • 主流程之外,提供更多工程化能力的配置项
  • image.png
  • 重点
    • entry / output
    • module / plugins
    • mode
    • watch / devServe / devtool
      • module : 配置 loader
        • rules : 配置 loader 规则
          • test : 需要处理的文件
          • use : 使用什么 loader 来处理文件 image.png

4. 使用 webpack

  • 接入 Babel
    • webpack 处理 js 的工具。Babel 本质上一种代码转移的工具
    • 将高版本的 js 代码转换为低版本的代码,以此来提高兼容性
    • 使用方法
      • 安装依赖 image.png
      • 配置 image.png
    • 思考题
      • Babel 具体有什么功能
      • Babel 与 webpack 分别解决了什么问题?为什么两者能协作到一起
  • 生成 HTML
    • 使用方法
      • 安装依赖 image.png
      • 相关配置 image.png
      • 该插件能够自动帮助我们生成 html 文件
    • 思考题
      • 相比手工维护 HTML 内容,这种自动生成的方式有什么优缺点
  • 工具线 image.png
    • XMR---模块热替换
      • 更新的代码能够立刻在浏览器不刷新的前提下能够更新代码
      • 使用方法
        • 配置 image.png
          • 设置 watch: true 来让 webpack 持续的构建
        • 启动 image.png
    • image.png
    • Tree-Shaking---树摇
      • 用于删除 Dead Code
        • 代码没有被用到,不可到达
        • 代码的执行结果不会被用到
        • 代码只读不写
      • 而 Tree-Shaking 就是要将定义但是没有实际使用的变量删除
      • 使用方法
        • 配置 image.png
      • 对工具类库如 Lodash 有奇效
    • 其他工具
      • 缓存
      • Sourcemap
        • 将压缩的产物映射回最初始化的状态
      • 性能监控
      • 日志
      • 代码压缩
      • 分包
    • 思考题
      • 除上面提到的内容,还有哪些配置可以分为 流程类 配置
      • 工具类配置具体有什么作用? 包括 devtool/cache/stat 等,其背后用到的技术什么