Q1- 对webpack的理解 + 它解决了什么问题

122 阅读4分钟

Q1 说说你对webpack的理解,它解决了什么问题

A:

1 Webpack的本质

1 Webpack的本质

Webpack是一个现代JS应用的 静态模块打包工具(Module Bundler)

这里面的重点是「静态」、「模块」 和 「打包工具」

2 Webpack的核心作用

1 webpack解决的 核心问题/ webpack的核心作用

Webpack 的核心作用:模块打包(Module Bundle)

模块: 说明了 Webpack的 处理对象 打包: 说明了 Webpack的 核心功能 静态: 说明了 Webpack的 工作方式

即 模块是 webpack的输入,打包是 webpack的处理过程 和 输出结果

下面从 历史发展角度,详细介绍webpack的 发展过程

2.1 模块

1 一开始的 原始前端开发方式: 写一个HTML文件,直接在文件中引入CSS/JS 文件

2 随着前端项目越来越复杂,以上写法 开始暴露问题

  • 全局变量污染,容易出现 命名冲突
  • 文件依赖关系不清晰 + 文件加载顺序需要 手动管理
  • 文件请求过多,导致请求时间变长
<!-- 如果顺序错了,整个页面就有可能报错 -->
<script src="jquery.js"></script>
<script src="main.js"></script>

3 为了解决 以上部分问题,出现了 「模块化」的规范

  • 模块化 把项目代码拆分为 功能积木,每个模块 都有 独立的作用域,避免 全局变量污染
  • 模块化 通过「导入导出」 语法,显式声明了 文件之间的依赖关系
  • 注意:模块化规范本身 只提供了依赖声明的语法,需要打包工具(如webpack),来实际处理这些依赖关系 + 管理加载顺序
// 没有模块化规范时的 index.js:功能混杂 + 依赖关系不清晰
function 功能1() {}
function 功能2() {}
function 功能3() {}


// 使用模块化规范后的 index.js:功能拆分 + 显式声明了 依赖文件
import 功能1 from './功能1.js'
import 功能2 from './功能2.js'
import { 功能3 } from './功能3.js'

以上就是「静态模块打包工具」 里 「模块」的含义:

  • webpack 处理的对象单位是 模块

2.2 打包

1 虽然出现了 「模块化」规范,但是在具体使用时,出现了以下问题

  • 「模块化」规范 有多种实现方式,实现方式不统一
  • 浏览器不支持直接使用「模块化」规范 语法
// 开发时,我们用模块化写代码:
// user.js
export function login() { /*...*/ }
   
// cart.js
import { login } from './user.js'

// 但浏览器并不认识这种写法!
// <script type="module"> 虽然现在支持,但兼容性和性能都有问题

2 webpack通过「打包」, 解决了模块化 未解决+新出现的 问题

「打包」的流程概述

  • 分析依赖:从入口文件开始,生成依赖图
  • 转换代码:处理模块化语法,转化为浏览器能理解的格式
  • 合并代码:按照依赖关系,把所有模块代码合并到一起,确保执行顺序正确

也就是说,通过打包过程,解决了「文件依赖关系需要手动管理」+ 「文件请求过多」+ 「模块化规范无法在浏览器中运行」的问题

以上就是「静态模块打包工具」 里 「打包」的含义:

  • 自动处理依赖关系 + 统一模块化规范代码 + 合并文件

2.3 静态

1 静态,说明了 Webpack 的工作方式

  • 静态:在代码编写阶段,就确定了 依赖关系
  • 动态:代码运行时才确定依赖关系

即,依赖关系不受 外部变量的影响,在代码编写阶段,就确定了

2 静态分析的优势: 在打包时就可以知道 所有依赖关系

  • 删除未使用的代码(Tree Shaking)
  • 优化模块顺序
  • 分割代码块

3 需要注意的是, Webpack 也能支持 动态导入

3 Webpack的延伸功能

1 webpack的核心功能:模块打包

2 webpack的延伸功能

  • Loader: 把 非JS的资源文件 也能转换为模块
  • Plugin: 对 打包过程功能 进行扩展
  • 开发效率: devServer/ HRM/ sourceMap ...
  • 性能优化: 代码分割/ tree shaking ...
  • 工程化支持: 代码检查/ 多环境支持/ 自动部署 ...

参考文档

01-珠峰-webpack基础含义与常用配置1

02-珠峰-webpack基础含义与常用配置2