Webpack|青训营笔记

41 阅读3分钟

Webpack|青训营笔记

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

webpack简介

什么是webpack?

  • 本质上是一种前端资源的编译,打包工具。它将根据模块的依赖关系,进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源。
  • Webpack 可以将多种静态资源 js、css、less 转换成一个静态文件,减少了页面的请求。

使用webpack

核心流程(极简版)

  1. 入口处理‘entry’

    从‘entry’文件开始,启动编译;流程

  2. 依赖解析‘require’‘import’

    从entry文件开始,根据‘require’或‘import’等语句找到依赖资源

  3. 资源解析‘module’

    根据‘module’配置,调用资源转移器,将png,css等非标准JS资源转译为JS内容

  4. 资源合并打包‘output’

    将转译后的资源内容合并打包为可直接在浏览器运行的JS文件

模块化+一致性

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

使用方法

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

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

四个核心

入口(entry)

  • 入口起点(entry point):指示 webpack 应该使用哪个模块,来作为构建其内部依赖图的开始。进入入口起点后,webpack 会找出有哪些模块和库是入口起点(直接和间接)ree依赖的。

输出(output)

  • output 属性告诉 webpack 在哪里输出它所创建的 bundles,以及如何命名这些文件,默认值为 ./dist。基本上,整个应用程序结构,都会被编译到你指定的输出路径的文件夹中。

loader

  • loader 让 webpack 能够去处理那些非 JavaScript 文件(webpack 自身只理解 JavaScript)。loader 可以将所有类型的文件转换为 webpack 能够处理的有效模块,然后你就可以利用 webpack 的打包能力,对它们进行处理。

插件(plugins)

  • 插件则可以用于执行范围更广的任务。插件的范围包括,从打包优化和压缩,一直到重新定义环境中的变量。插件接口的功能极其强大,可以用来处理各种各样的任务。

工具线

模块热替换(HMR)

  • 模块热替换(HMR - Hot Module Replacement)功能会在应用程序运行过程中替换、添加或删除模块,而无需重新加载整个页面。主要是通过以下几种方式,来显著加快开发速度:

    • 保留在完全重新加载页面时丢失的应用程序状态。
    • 只更新变更内容,以节省宝贵的开发时间。
    • 调整样式更加快速 - 几乎相当于在浏览器调试器中更改样式。

树摇(Tree-Shaking)

  • 作用:用于删除Dead Code(模块导出了,但未被其他模块使用)

  • 什么是Dead Code?

    • 代码没有被用到,不可达到
    • 代码的执行结果不会被用到
    • 代码只读不写
    • ...
  • 开启Tree-Shaking

    • mode:production
    • optimization.uesExports:ture