一文带你梳理Webpack面试题(2024年版)

又是一年金九银十,虽然市场一般,如何才能抓住来之不易的机会呢?自然是砥砺自身能力,完善知识体系。
挖下深坑擒虎豹,挂上长线钓金鳌。

本文基于笔者的个人面试经历 + 线上他人面经,筛选整理 webpack 常见面试题,并主观标记重点,各位酌情参考;

评论区有抽奖🥇哦


一、为什么要工程化

因为在浏览器端,开发时态、运行时态的侧重点不一样:

开发时态: devtime

  1. 模块划分越细越好
  2. 支持多种模块化标准
  3. 不考虑兼容性,怎么方便怎么写
  4. 支持 npm 或其他包管理器下载的模块

运行时态: runtime

  1. 文件越少越好
  2. 文件体积越小越好
  3. 代码内容越乱越好(安全性)
  4. 所有浏览器都要兼容
  5. 能够解决其他运行时的问题,主要是执行效率问题

这种差异在小项目中表现的并不明显,可是一旦项目形成规模,就越来越明显,如果不解决这些问题,前端项目形成规模只能是空谈。

解决方法

既然两种时态面临的侧重点不同,那么我们需要一个工具,能够将开发时态写的代码转换为运行时态的代码。

此时开发者只用专注开发左边的代码结构就好,一切问题,都由构建工具抹平。

常见的构建工具:webpack、vite、grunt、gulp、browserify …


二、webpack 基础

webpack 是基于模块化的打包(构建)工具,它把一切视为模块。

它通过一个开发时态的入口模块为起点,分析出所有的依赖关系,然后经过一系列的过程(压缩、合并),最终生成运行时态的文件。

01|特性

  • 为前端工程化而生:webpack 致力于解决前端工程化,特别是浏览器端工程化中遇到的问题,让开发者集中注意力编写业务代码,而把工程化过程中的问题全部交给 webpack 来处理
  • 简单易用:支持零配置,可以不用写任何一行额外的代码就使用 webpack
  • 强大的生态:非常灵活、可以扩展,webpack 本身的功能并不多,但它提供了一些可以扩展其功能的机制,使得一些第三方库可以融于到 webpack 中
  • 基于nodejs: 由于 webpack 在构建的过程中需要读取文件,因此它是运行在 node 环境中的
  • 基于模块化:webpack 在构建过程中要分析依赖关系,方式是通过模块化导入语句进行分析的,它支持各种模块化标准,包括但不限于 CommonJS、ES6 Module

02|安装与使用

步骤 1:初始化项目

创建项目目录:

mkdir my-webpack-project
cd my-webpack-project

初始化项目: npm init -y

步骤 2:安装 Webpack 和 Webpack CLI

npm install --save-dev webpack webpack-cli

步骤 3:创建 Webpack 配置文件

在项目根目录下创建一个名为 webpack.config.js 的文件,并添加以下基本配置:

const path = require('path');

module.exports = {
  entry: './src/index.js', 
  output: {
    filename: 'bundle.js', 
    path: path.resolve(__dirname, 'dist') 
  },
  mode: 'development' 
};

步骤 4:创建项目结构

创建必要的目录和文件:

mkdir src
touch src/index.js

src/index.js 文件中添加一些示例代码:

console.log('Hello, Webpack!');

步骤 5:更新 package.json 脚本

package.json 文件中添加一个脚本来运行 Webpack:

{
  "name": "my-webpack-project",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "build": "webpack"
  },
  "devDependencies": {
    "webpack": "^5.0.0",
    "webpack-cli": "^4.0.0"
  }
}

步骤 6:运行 Webpack

使用以下命令运行 Webpack 构建项目:npm run build

运行成功后,你将在项目根目录下看到一个 dist 目录,里面包含了 bundle.js 文件。


三、市面常见面试题

00|减少代码体积方案

减少代码体积是优化前端性能的重要步骤,主要通过以下几种方法来实现:

1、代码压缩

通过删除代码中的空格、注释、换行符以及缩短变量名等方式来减少代码体积。

2、样式和脚本的合并

将多个 CSS 文件和 JavaScript 文件合并成一个文件,以减少 HTTP 请求的数量,从而提高加载速度。

3、移除未使用的代码(Tree Shaking)

Tree Shaking 是一种通过静态分析模块依赖关系,移除未使用代码的技术。常用的工具包括:

  • Webpack:支持 Tree Shaking 的打包工具。
  • Rollup:专注于 ES6 模块的打包工具,支持 Tree Shaking。

4、延迟加载

指在需要时才加载某些资源,以减少初始加载的代码体积,常用的方法包括:

  • 动态导入:在需要时才加载模块。
  • 按需加载:将代码分割成多个小块,按需加载。

5、图片和资源优化

虽然这不直接减少 JavaScript 或 CSS 代码的体积,但优化图片和其他资源可以显著减少整体页面的加载时间。常用的方法包括:

  • 图片压缩:使用工具如 ImageOptimTinyPNG 等。
  • 使用矢量图:如 SVG 格式的图像。
  • 使用 WebP 格式:比传统的 JPEGPNG 更小。

01|为什么要用 Webpack

没用 webpack 之前有什么问题:

  1. 全局变量污染: 传统的 JavaScript 开发中,所有变量和函数默认都是全局的;
  2. 手动管理依赖顺序麻烦:

显示验证码
没有账号?注册  忘记密码?