Webpack知识体系 | 青训营笔记

37 阅读2分钟

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

什么是 Webpack

前端项目由许多资源构成,如 pngjpggifwebpjstscsslessvuejsxsass 等,在以前,这些资源通常是手工管理。但手工管理有如下缺点:

  • 依赖手工,过程繁琐
  • 当代码文件之间有依赖的时候,就得严格按依赖顺序书写
  • 开发与生产环境一致,难以接入TS或JS新特性
  • 比较难接入Less、Sass等工具
  • JS、图片、CSS资源管理模型不一致

这些都是旧时代非常突出的问题,对开发效率影响非常大,直到工程化工具的出现才就解决了这一问题,webpack 就是其中的佼佼者。

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

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

使用 Webpack

示例

  1. 安装

npm i -D webpack webpack-cli

  1. 编辑配置文件

image.png

  1. 执行编译命令

npx webpack

效果:

image.png

核心流程

  1. 入口处理

entry 文件开始,启动编译流程

  1. 依赖解析

entry 文件开始,根据 require or import 等语句找到依赖资源

  1. 资源解析

根据 module 配置,调用资源转移器,将 png、css 等非标准 JS 资源转译为 JS 内容 (递归调用2、3,直到所有资源处理完毕)

  1. 资源合并打包

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

使用 Webpack

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

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

流程类配置

  • 输入:entrycontext
  • 模块解析:resolveexternals
  • 模块转译:module
  • 后处理:optimizationmodetarget

处理 css

  1. 安装

npm install css-loader style-loader -D

  1. 添加 module 处理 css 文件

image.png

接入 Bable

  1. 安装

npm install @babel/core @babel/preset-env babel-loader -D

  1. 添加 module

image.png

生成 HTML

  1. 安装

npm install html-webpack-plugin -D

  1. 添加 module

image.png