Webpack知识体系 | 青训营笔记

34 阅读3分钟

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

Webpack知识体系

为什么要学习Webpack

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

image.png

image.png

前端项目由什么构成?- 资源

  • 依赖手工,比如有50个JS文件...操作,过程繁琐
  • 当代码文件之间有依赖的时候,就得严格按依赖顺序书写
  • 开发与生产环境一致,难以接入 TS 或 JS 新特性
  • Less、Sass 等工具比较难接入
  • JS、图片、CSS 资源管理模型不一致 这些都是旧时代非常突出的问题,对开发效率影响非常大

出现了很多工程化工具,某种程度上正是这些工具的出现,才有了“前端工程”这一概念

image.png

使用webpack(处理CSS)

image.png

  1. 安装webpack和webpack-cli,添加依赖

image.png

  1. 写入webpack配置文件

image.png

  1. 终端执行npx webpack

打包核心流程如下(实质就是模块化和一致性) image.png

只有entry和output是必须的

  1. 输入:entry(项目入口文件),context
  2. 模块解析:resolve,externals
  3. 模块转译:module(定义loader属性)
  4. 后处理:optimization,mode,target plugins定义webpack的插件

image.png

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

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

module中,想要对其他文件完成解析,就需要在use中使用loader(针对不同后缀名使用不同的处理loader):

image.png

问题:

  • Loader 有什么作用? 为什么这里需要用到 css-loader、style-loader
  • 与旧时代——在 HTML 文件中维护 css 相比,这种方式会有什么优劣处?
  • 有没有接触过 Less、Sass、Stylus 这一类 CSS 预编译框架? 如何在 Webpack 接入这些工具? 参考资料:
  • Css-loader
  • Webpack 原理系列七: 如何编写Loader
  • Style-loader

使用webpack(处理js):接入babel 相当于是一个将高版本的js代码转译成低版本的,从而提高兼容性

image.png

image.png

思考题:

  • Babel 具体有什么功能?
  • Babel 与 Webpack 分别解决了什么问题? 为何两者能协作到一起了?

参考资料:

  • Babel-loader
  • Babel 官网
  • @babel/preset-env
  • @babel/preset-react
  • @babel/preset-typescript

使用webpack(生成html,相当于直接不写了) image.png

思考题:

  • 相比于手工维护 HTML 内容,这种自动生成的方式有什么优缺点? 参考资料:
  • html-webpack-plugin

Hot Module Replacement -- 模块热替换 不需要刷新,直接更新代码显示

image.png

Tree-shaking :删除未用代码

image.png

image.png

其它工具:

  • 缓存:v5前效果不好
  • Sourcemap:压缩后代码映射回开始开发状态
  • 性能监控
  • 日志
  • 代码压缩
  • 分包

标题:Webpack 定义解析 - 掘金

网址:juejin.cn/course/byte…