[ webpack知识体系 | 青训营笔记]

63 阅读3分钟

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

一、本堂课重点内容:

  • Webpack简介
  • webpack用法
  • loader及插件介绍

二、详细知识点介绍:

webpack简介

为什么学习webpack?

  • 帮助理解工程化概念
  • 高阶前端必备
  • 团队核心竞争力

前端项目构成:资源文件

而旧式的手动管理资源模式(在页面引入)十分麻烦,效率很低

于是工程化工具诞生

webpack

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

功能包括但不限于:

  • 多份资源文件打包成bundle
  • 支持多种特性如TS、Sass、Eslint等
  • 支持模块化处理CSS、图片等资源文件
  • 支持HMR+开发服务器
  • 支持持续监听、持续构建

webpack用法

1.安装

 npm i -D webpack webpack-cli

2.编辑配置文件 webpack.config.js

3.执行编译命令

 npx webpack

核心流程

  • 入口处理
  • 依赖解析
  • 资源解析
  • 资源合并打包

本质功能:

模块化+一致性

实际用法:

就是怎么写配置文件

配置项

流程类

作用于流程中的环节

  • 输入:entry、context
  • 模块解析:resolve、externals
  • 模块转译:module
  • 后处理:mode、target
  • 输出:output

工具类

主流程外提供工程化的工具配置

部分用法简介

CSS加载

loader

 npm add -D css-loader style-loader

添加module

在index.js文件中import

loader的作用:

帮助加载非js标准资源

与在html文件中维护css相比的优劣:

在资源多,工程量大时体现出极高的可维护性,提高效率

接入Babel

 npm i -D @babel/core @babel/preset-env babel-loader
babel功能:

是一个工具链,用于转译编译JS、TS,提高兼容性

生成HTML

 npm i -D html-webpack-plugin

自动生成html的优点

自动生成可以减少手写便签等重复的工作,提高效率,还能自动适配链接依赖,提高了可维护性。

工具类

HMR 模块热替换

可以即时更新代码在页面的效果,提高开发调试的效率

在配置文件中开启

 module.exports = {
   //...
   devServe:{
     hot: true
   }
 };

启动:

 npx webpack serve
Tree-Shaking

用于清除Dead Code,避免代码冗余

 mode:production
 optimization:{
   usedExports: true
 }

其他工具

  • 缓存
  • Sourcemap
  • 性能监控
  • 日志
  • 代码压缩
  • 分包

理解Loader

loader的功能就是资源的转化

因为webpack只认识JS,要处理非标准JS资源,就需要loader进行资源的转化

链式调用:

如less-loader、css-loader、style-loader之间的联系

简单来说就是每个loader层级不同,基层loader的输出是下一层的输入,只有经过逐步的转化才能实现最终的加载。

  • 支持异步执行
  • 分为normal、pitch两种模式

理解插件

webpack编译过程极其复杂,难以上手

于是有了插件

插件架构精髓:

  • 对扩展开放、对修改封闭

既提高了可扩展性,也保证了一定的安全性

loader和插件

插件用于解决loader无法解决的其他功能

插件围绕钩子展开

钩子关键

  • 时机
  • 上下文
  • 交互

学习方法

入门

  • 理解打包流程
  • 熟悉掌握配置项
  • 掌握常见脚手架用法

进阶

  • 理解Loader、Plugin机制
  • 理解常见性能优化
  • 理解前端工程化概念

大师级

  • 阅读源码,理解webpack编译、打包原理,参与共建

三、课后个人总结:

今天的课程主要围绕webpack这个工具展开。为了更好的工程化,webpack这类应用应运而生。就拿webpack来说,它能够将资源文件打包,生成为指定文件,大大减少维护工程的繁琐度。webpack的各种插件也提高了其可扩展度,总而言之,今天介绍的webpack工具是迈向前端工程化重要一步,需要后续好好学习。

如有错漏,欢迎指出,谢谢。