构建Webpack体系|青训营笔记

93 阅读3分钟

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

写在前面

Webpack is a module bundler.

作为前端工程化的工具链,webpack作为打包工具被广泛运用,那么为什么简单的脚本引入,或者是样式引入,需要通过webpack大包呢?那么其他打包工具vite跟rollup又有什么不一样呢?这些疑问可以从课程中得到解答。

什么是webpack

Screen Shot 2022-08-11 at 10.54.13 PM.png

放一张webpack官网的图

首先,前端网页是有很多个资源文件组成的,比如说图片,比如说脚本、动图等,传统的引入方式存在下面的问题:

Screen Shot 2022-08-11 at 10.56.09 PM.png

这时候就会出现许多不同的打包工具,为人熟知的有比如说webpackviterollupgulp这些。虽然在应用层面,这些应用都差不多,但是webpack作为现在最流行的打包工具之一,自然也会有一些优势,下面将展开阐述。

Screen Shot 2022-08-11 at 10.58.02 PM.png

webpack支持类型

如何使用webpack

快速开始

  1. 首先安装webpack-cli依赖
npm i -D webpack webpack-cli
  1. 编辑配置文件
  2. 编译
npx webpack

当然具体还得具有内容 可以参看Getting start webpack.js.org/guides/gett…

作为新手使用webpack,需要了解的即是webpack的相关配置内容。

相关配置内容呢,又包括流程类的和工具类的配置,

模块配置

流程类的配置首先第一个就是entry编译入口了,下图也有很多关键的配置信息。

Screen Shot 2022-08-11 at 11.27.07 PM.png

Screen Shot 2022-08-11 at 11.32.17 PM.png

接入babel

Screen Shot 2022-08-11 at 11.35.17 PM.png

ES5到ES6的跨度很大,在使用一些ES6标准比如说箭头函数=>的时候,为了兼容多种不同的浏览器,因此这时候是需要进行转译ES5的。在浏览器标准没有统一的时候,Babel无疑是增添了许多便利。在webpack当中也可以以loader的方式接入babel。

Tree-shaking

Tree-shaking通俗来说我想应该是指按需编译,这一点在vite上做的会比较好(感觉,

Screen Shot 2022-08-11 at 11.48.08 PM.png

按需编译减少了代码的冗余,使得最后产出的代码会更加精简。

loader

loader是webpack里面比较核心的配置文件,用于将非js的标准转译为js。webpack 可以使用 loader 来预处理文件。这允许你打包除 JavaScript 之外的任何静态资源。 常用的loader有以下这些:

  • file-loader:打包图片,打包字体图标
  • url-loader 功能类似于 file-loader,但是在文件大小(单位 byte)低于指定的限制时,可以返回一个 DataURL(提升网页性能)。
  • css-loader:和图片一样webpack默认能不能处理CSS文件, 所以也需要借助loader将CSS文件转换为webpack能够处理的类型。解析css文件中的@import依赖关系,打包时会将依赖的代码复制过来代替@import。
  • style-loader: 将css文件通过css-loader处理之后,将处理之后的内容插入到HTML的HEAD代码中。
  • scss-loader:自动将scss转换为CSS
  • less-loader:自动将less转换为CSS

Screen Shot 2022-08-11 at 11.49.34 PM.png

插件

而webpack由于内置的函数和类特别多,因此插件对外开放的接口里以钩子hook的形式展开。

插件向第三方开发者提供了 webpack 引擎中完整的能力。使用阶段式的构建回调,开发者可以引入它们自己的行为到 webpack 构建流程中。创建插件比创建 loader 更加高级,因为你将需要理解一些 webpack 底层的内部特性来做相应的钩子。

如果需要编写webpack插件,则可以参照官方的文档给出的

www.webpackjs.com/contribute/…

深入便携插件。

Screen Shot 2022-08-11 at 11.53.03 PM.png

写在后面

其实整个课程的内容十分之多,知识点也十分丰富。(因为笔者要去重构小程序,写下这一篇水文,泛泛而谈,觉得有点愧疚,之后会回来多加补充和深度学习。

Screen Shot 2022-08-11 at 11.50.48 PM.png