webpack 知识体系 | 青训营笔记

58 阅读2分钟

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

为什么要学习 Webpack

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

webpack 是什么

webpack 是一种前端资源构建工具,一个静态模块打包器(module bundler)。 在webpack 看来, 前端的所有资源文件(js/json/css/img/less/...)都会作为模块处理。它将根据模块的依赖关系进行静态分析,打包生成对应的静态资源(bundle)。 image.png

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

webpack 五个核心概念

_### _Entry 入口(Entry):指示 webpack 以哪个文件为入口起点开始打包,分析构建内部依赖图。

Output

输出(Output):指示 webpack 打包后的资源 bundles 输出到哪里去,以及如何命名。

Loader

Loader:让 webpack 能够去处理那些非 JS 的文件,比如样式文件、图片文件(webpack 自身只理解JS)

Plugins

插件(Plugins):可以用于执行范围更广的任务。插件的范围包括,从打包优化和压缩,一直到重新定义环境中的变量等。

Mode

模式(Mode):指示 webpack 使用相应模式的配置。

选项描述特点
development会将 DefinePlugin 中 process.env.NODE_ENV 的值设置为 development。启用 NamedChunksPlugin 和 NamedModulesPlugin。能让代码本地调试运行的环境
production会将 DefinePlugin 中 process.env.NODE_ENV 的值设置为 production。启用 FlagDependencyUsagePlugin, FlagIncludedChunksPlugin, ModuleConcatenationPlugin, NoEmitOnErrorsPlugin, OccurrenceOrderPlugin, SideEffectsFlagPlugin 和 TerserPlugin。能让代码优化上线运行的环境

使用 Webpack

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

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

image.png

配置总览

webpack 官方配置文档 image.png

理解插件

对外开放,对内封闭 image.png

学习方法

webpack 知识体系 image.png image.png