webpack构建工具面试题

【高频考点精讲】前端Source Map:如何调试压缩后的代码? 🧑‍🏫:全栈老李📅:2025 年 5 月🧑‍💻:前端初学者、进阶开发者🚀:本文由全栈老李原创,转载请注明出处。调试线上代码就像在黑暗森林里找路,而Source Map就是那盏照亮黑暗的手电筒。今天全栈老李带大家深入聊聊这个前端工程师的"救命稻草"。 阅读详情

1. 构建工具的作用

  • 简化编程过程
  • 在编程的过程中能够使用最新语法、简单的编写方式
  • 最终打包出来的产物变成体积小、兼容性强、能够在浏览器运行的标准语法

2. webpack的优点

  • 模块化:支持将项目拆分为多个模块,最终将多个模块进行打包
  • 代码拆分和按需加载:支持将代码拆分为多个chunk,并且实现按需加载,降低页面加载时间,对spa应用极为友好
  • 资源优化:支持代码压缩、tree-shaking、静态资源压缩等功能
  • 热更新:支持热更新,修改代码时无需再次编译整个文件,只会对改动内容进行重新编译

3. 常见的Loader和Plugin

Loader

  • image-loader : 加载并且压缩图片文件
  • css-loader : 加载 CSS,支持模块化、压缩、文件导入等特性
  • style-loader : 把 CSS 代码注入到 JavaScript 中,通过 DOM 操作去加载 CSS
  • eslint-loader : 通过 ESLint 检查 JavaScript 代码
  • babel-loader : 把 ES6 转换成 ES5

Plugin

  • define-plugin : 定义环境变量

  • html-webpack-plugin : 简化 HTML 文件创建

  • webpack-parallel-uglify-plugin : 多进程执行代码压缩,提升构建速度

  • mini-css-extract-plugin : 分离样式文件,CSS 提取为独立文件,支持按需加载

4. Loader和Plugin的区别

功能不同:

  • Loader:本质是一个函数,是一个转换器

    • webpack只能解析原生js文件,对于其他类型文件就需要用loader进行转换
  • Plugin:是一个插件,用于增强webpack功能

    • webpack在运行的生命周期中会广播出许多事件,Plugin 可以监听这些事件,在合适的时机通过 webpack 提供的 API 改变输出结果

用法不同:

  • Loader的配置是在module.rules下
    • 每⼀项都是⼀个 Object ,⾥⾯描述了对于什么类型的⽂件( test ),使⽤什么加载( loader )和使⽤的参数( options )
  • Plugin的配置在plugins下
    • 每一项是一个 Plugin 的实例,参数通过构造函数传入

5. webpack的构建过程

  • 初始化:
    • 启动构建,读取与合并配置参数
    • 加载 Plugin
    • 实例化 Compiler
  • 编译:
    • 从 Entry 出发,针对每个 Module 串行调用对应的 Loader 去翻译文件的内容
    • 再找到该 Module 依赖的 Module,递归地进行编译处理
  • 输出:
    • 将编译后的 Module 组合成 Chunk
    • 将 Chunk 转换成文件,输出到文件系统中

6. 热更新及其原理

  • 热更新HMR:在不刷新页面的前提下,将新代码替换成旧代码
  • 原理:
    • webpack-dev-server(WDS)和浏览器之间维护了一个websocket服务
    • 当本地资源发生变化后,webpack会先将打包生成新的模块代码放入内存中
    • WDS向浏览器推送更新,并附带上构建时的hash,让客户端和上一次资源进行对比
    • 客户端对比出差异后会向WDS发起Ajax请求获取到更改后的内容(文件列表、hash)
    • 通过这些信息再向WDS发起jsonp请求获取到最新的模块代码

7. bundle,chunk,module是什么

  • bundle 捆绑包: 它是构建过程的最终产物,由有需要的chunk和module组成

  • chunk 代码块:一个chunk由多个模块组合而成,用于代码的合并和分割,在构建过程中一起被打包到一个文件中

  • module 模块:是代码的基本单位,可以是一个文件、一个组件、一个库等,在编译的时候会从entry中递归寻找出所有依赖的模块

8. Code Splitting是什么

  • 是代码分割,允许将一个大的chunk拆分成多个小的chunk,从而实现按需加载,减少初始加载时间,并提高应用程序的性能
  • 每个代码块代表不同的功能或路由,这些代码块可以在需要时被动态加载,使得页面只加载当前所需的功能,而不必等待整个应用程序的所有代码加载完毕
  • 通过optimization.splitChunks配置项来开启代码分割

9. Source Map是什么?如何配置生成Source Map

  • Source Map是一种文件,它建立了构建后的代码与原始源代码之间的映射关系
  • 通常在开发阶段开启,用来调试代码,帮助找到代码问题所在
  • 可以在Webpack配置文件中的devtool选项中指定devtool: 'source-map'来开启

10. Tree Shaking原理

  • 也叫摇树优化,是一种通过移除多余代码,从而减小最终生成的代码体积,生产环境默认开启
  • 原理:
    • 基础是ES6模块系统,具有静态特性,模块的导入和导出关系在编译时就已经确定
    • Webpack会通过静态分析依赖图,从入口文件开始,逐级追踪每个模块的依赖关系,以及模块之间的导入和导出关系
    • 分析模块依赖时,Webpack会标记每个变量、函数、类和导入,以确定它们是否被实际使用。如果一个导入的模块只是被导入而没有被使用,或者某个模块的部分代码没有被使用,Webpack会将这些未使用的部分标记为"unused"
    • 在代码标记为未使用后,Webpack会在最终的代码生成阶段,通过工具(如UglifyJS等)删除这些未使用的代码,这包括未使用的模块、函数、变量和导入

11. 如何提高webpack的打包速度

  • 缓存:利用Webpack的持久缓存功能,避免重复构建没有变化的代码

    • 可以使用cache: true选项启用缓存
  • 多进程/多线程构建 :使用thread-loader、happypack等插件可以将构建过程分解为多个进程或线程,从而利用多核处理器加速构建

  • 使用DllPlugin和HardSourceWebpackPlugin:

    • DllPlugin可以将第三方库预先打包成单独的文件,减少构建时间
    • HardSourceWebpackPlugin可以缓存中间文件,加速后续构建过程
  • 使用Tree Shaking:配置Webpack的Tree Shaking机制,去除未使用的代码,减小生成的文件体积

  • 移除不必要的插件:移除不必要的插件和配置,避免不必要的复杂性和性能开销

12. 如何减少打包后的代码体积

  • 代码分割:将应用程序的代码划分为多个代码块,按需加载,可以减小初始加载的体积,使页面更快加载
  • Tree Shaking:配置Webpack的Tree Shaking机制,去除未使用的代码
  • 压缩代码:使用工具如UglifyJS或Terser来压缩JavaScript代码,这会删除空格、注释和不必要的代码,减小文件体积
  • 使用生产模式:在Webpack中使用生产模式,通过设置mode: 'production'来启用优化,这会自动应用一系列性能优化策略,包括代码压缩和Tree Shaking
  • 使用压缩工具:使用压缩工具,如Brotli和Gzip,来对静态资源进行压缩,从而减小传输体积
  • 利用CDN加速:将项目中引用的静态资源路径修改为CDN上的路径,减少图片、字体等静态资源等打包

13. vite比webpack快在哪里

  • 冷启动速度:

    • vite利用浏览器的原生ES moudle,采用按需加载的,而不是将整个项目打包
    • 而webpack是将整个项目打包成一个或多个bundle,构建过程复杂
  • HMR热更新:

    • vite使用浏览器内置的ES模块功能,哪个文件更新就加载那个文件
    • Webpack在热更新时重新加载整个包
  • 构建速度:

    • Vite的按需加载避免了将所有代码打包到一个大文件中,而且,Vite对于缓存、预构建等方面的优化也有助于减少构建时间
  • 缓存策略: Vite利用浏览器的缓存机制,将依赖的模块存储在浏览器中,避免重复加载

  • 不需要预编译: Vite不需要预编译或生成中间文件,减少了文件IO操作,进一步提升了速度

14. Babel原理

大概分成三大部分:

  • 解析:将代码转换成 AST

    • 词法分析(分词):将代码(字符串)分割为token流,即语法单元组成的数组
    • 语法分析:分析token流(上面生成的数组)并生成 AST
  • 转换:访问 AST 的节点进行变换操作生产新的 AST

  • 生成:以新的 AST 为基础生成代码

webpack面试题及详细答案80题(1-40) Webpack面试题精要 核心概念 Webpack是模块打包工具,通过递归构建依赖图将各种资源打包成bundle。核心概念包括: Entry:构建起点,支持单/多入口配置 Output:定义输出路径和命名规则 Loader:转换非JS资源(如CSS-loader处理样式) Plugin:扩展功能(如HtmlWebpackPlugin生成HTML) Mode:开发/生产模式的内置优化 工具对比 与Gulp/Grunt不同,Webpack基于依赖分析打包,适合现代前端工程;后者是任务运行工具,适合简单自动化。 阅读详情

相关推荐

nnDetection复现Luna16 附模型

淘论文发现nnDetection框架对肺结节的检测效果挺好,便跑了跑复现了下, 作者诚不欺人,确实挺好, 并附上我依据文档训练的模型。

HeavenWalker 2597

前端面试题【构建工具篇】

在前端构建工具的选择和使用中,深入理解Webpack和Vite的原理及其区别,对于提高开发效率和项目性能至关重要。希望本文对于你在前端面试中对构建工具的问题有所帮助。如有疑问或建议,欢迎留言讨论。

向梦想前进 952

Python验证码识别神器ddddocr:5分钟搞定网站登录自动化(附完整代码)

本文详细介绍了如何使用Python开源库ddddocr快速实现验证码识别,结合Selenium完成网站登录自动化。ddddocr作为轻量级OCR工具,支持多种验证码类型,识别速度快且准确率高,特别适合自动化测试和爬虫开发。文章包含完整代码示例,从环境配置到实战应用,帮助开发者5分钟内实现验证码破解。

sprite的博客 798

前端自动化构建工具

为什么要使用前端构建工具?         自动化!!!!         对于需要反复重复的任务,例如压缩(minification)、编译、单元测试、linting等,自动化工具可以减轻你的劳动,简化你的工作。         当你在 Gruntfile 文件正确配置好了任务,任务运行器就会自动帮你或你的小组完成大部分无聊的工作。   Grunt grunt需要package.js...

Sherry's Blog 1741

高通Camera PDAF调试实战:从Type2到Type3的避坑指南与Log分析技巧

本文深入解析高通Camera平台PDAF调试实战,重点对比Type2与Type3的核心差异,提供详细的配置迁移方案和Log分析技巧。针对常见兼容性问题如对焦速度变慢、低光失效等,给出具体解决方案,并分享性能优化案例与高级调试工具链,帮助开发者快速提升PDAF调试效率。

weixin_29164185的博客 413

实时多目标跟踪(MOT):SORT与DeepSORT优化

实时多目标跟踪(MOT):SORT与DeepSORT优化​ ,人工智能,计算机视觉,大模型,AI,本文围绕实时多目标跟踪中的 SORT 与 DeepSORT 算法展开,阐述了两者原理、实现及优化。SORT 结合卡尔曼滤波和匈牙利算法,依赖目标检测,实时性好但复杂场景表现欠佳。DeepSORT 在其基础上引入外观特征,采用级联匹配,提升了跟踪精度和鲁棒性。还探讨了两种算法在检测、运动模型、外观特征等方面的优化方向,以及应用场景与选择建议,为相关应用和研究提供参考。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 20万+

2020前端面试真题(Node.js,Git ,Webpack,项目实战)

HTML5 1.HTML5 存储类型有什么区别? HTML5 能够本地存储数据,在之前都是使用 cookies 。HTML5 提供了两种本地存储方案: localStorage 用于持久化的本地存储,数据永远不会过期,关闭浏览器也不会丢失。 sessionStorage 同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。因此sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储。 2.cookie、localStorage、sessionStorage的区别? 特性 co

江理彭于晏的博客 1185

YOLO模型部署RK3588多核NPU并行加速完整教程:基于线程池的高性能AI推理实现

本教程详细介绍了如何在RK3588平台上实现多核NPU并行加速的AI推理方案。RK3588搭载3个独立NPU核心,总算力达6TOPS,支持单核、双核和三核三种工作模式。文章深入解析了NPU硬件架构特点,包括核心独立处理能力、内存带宽分配及多核心协作机制,并提供了C++代码示例展示核心负载均衡、任务调度和内存优化策略。通过线程池技术可以有效利用多核NPU并行计算能力,显著提升AI推理性能,特别适合高并发场景。教程还包含内存子系统的瓶颈分析和性能预估方法,为开发者提供完整的优化思路。

LXY_LOVE36的博客 797

Webpack 面试题精选:助你轻松应对面试

而 Webpack 是基于模块的构建工具,它自动分析模块之间的依赖关系,并构建依赖图,最终打包成优化后的静态资源。Webpack 是一个静态模块打包工具,它将项目中的各种资源(JavaScript、CSS、图片等)视为模块,并通过依赖关系将它们打包成优化后的静态资源。Loader 用于转换特定类型的模块,而 Plugin 可以用于执行更广泛的任务,例如打包优化、资源管理、环境变量注入等。从入口文件出发,调用所有配置的 Loader 对模块进行翻译,再找出该模块依赖的模块,递归地进行编译处理。

m0_73659339的博客 852

YOLO126优化:损失篇 | AAAI 2025 | 一种基于尺度的动态(SD)损失,根据目标大小动态调整尺度和位置损失的影响,提高了网络检测不同尺度目标的能力

提出了一种基于尺度的动态(SD)损失,它根据目标大小动态调整尺度和位置损失的影响,提高了网络检测不同尺度目标的能力。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 448

会话管理技巧——如何优化OpenClaw的上下文理解能力(2026进阶版)

本文深入探讨了OpenClaw系统的会话管理技术,重点介绍了会话定义、生命周期管理和上下文优化策略。会话管理包含会话ID、用户信息、状态等核心要素,以及创建、维护、终止和恢复四个生命周期阶段。上下文管理通过ContextManager类实现,支持创建、更新、消息添加和变量管理等功能,并采用历史记录机制确保会话连续性。ContextOptimizer类则负责应用优化规则,通过消息和变量压缩等技术提升系统性能。这些技术共同构建了OpenClaw强大的会话管理能力,为AI助手提供了高质量的交互体验基础。

博客 493

Gulp 和 webpack 入门

GulpGulp 是什么?gulp是一个基于流的构建工具,可以自动执行指定的任务,简洁且高效Gulp 能做什么?开发环境下,想要能够按模块组织代码,监听实时变化 css/js预编译,postcss等方案,浏览器前缀自动补全等 条件输出不同的网页,比如app页面和mobile页面 线上环境下,我想要合并、压缩 html/css/javascritp/图片,减少网络请求,同时降低网络负担 等等...安...

weixin_34324081的博客 200

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

webpack 的使用

项目做好以后,在上线之前还有一些工作需要去做:压缩css压缩js压缩图片编译sass合并文件。。。等等,在前端工作流出现之前,这些工作都由人力完成,而这些工作往往比写业务本身更加费时,效率非常之低且还容易出错,于是自动化的处理工具也就必然出现了。前端的构建工具常见的有Grunt、Gulp、Webpack三种,Grunt比较老旧,功能少,更新少,插件少。gulp适用于原生项目的打包,但是在现代的工作中使用非常少。webpack通常被用在框架中,使用量很大,所以我们学习webpack。

subsistent的博客 988

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

前端webpack面试题,零基础入门到精通,收藏这篇就够了

bundle:是由webpack打包出来的文件chunk:是指webpack在进行模块依赖分析的时候,代码分割出来的代码块module:是开发中的单个模块。

Javachichi的博客 1024

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

2024年前端最新vite和webpack的区别(1),2024年最新微信小程序 跳转页面

前端CSS面试题文档,JavaScript面试题文档,Vue面试题文档,大厂面试题文档开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】[外链图片转存中…(img-6pmXMqBx-1715587332463)]

2401_84617821的博客 351

前端面试题JS-CSS-TS-React-Webpack-构建工具-Electron

2023前端面试题

tutodelinglimgho的博客 1159

最新前端晋升必会技术:分析源码+VUE数据响应+vuex源码解析+webpack,2024腾讯前端面试题精选

由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!篇幅有限没有列举更多的前端面试题,小编把整理的前端大厂面试题PDF分享出来,一共有269页。webpack不再神秘-教你带你自己写一个loader。你不知道的vue那些事 - 网易内部花式玩转vue。vuex源码探秘—带你走进一个崭新的世界。

2401_84616292的博客 537

【面试题】 webpack面试篇

1、与webpack类似的工具还有哪些?谈谈你为什么选择webpack? grunt 优点:出现的比较早,第一代打包工具 缺点:配置项太多,只有一个配置文件,而且不同的插件可能有自己的配置字段,学习成本较高...

web全栈开发的博客 561

前端构建和打包工具进化史:从 Grunt 到 Vite

随着项目的规模越来越大,对构建和打包工具的要求也越来越高。我们需要的不仅仅是简单的任务自动化,还需要高效的模块化管理、代码分割、树摇优化以及热更新等功能。因此,选择合适的构建和打包工具变得尤为重要。

2401_87546826的博客 1073

前端进阶高薪必看:Webpack VS Vite 原理剖析

Webpack的重要性就不必说了,在前端构建领域,webpack是最热门的工具之一,无论你用啥框架,走的哪条前端路线,都得会webpack。而且在跳槽面试的时候,尤其前端高级岗位的面试,你...

Yvette Lau的专栏 581

webpack使用流程

webpack是一个流行的前端项目构建工具(打包工具),提供代码压缩混淆、js兼容、性能优化问题等功能,从而让程序员把工作的中心放到具体的功能实现上。

wanghe1111_的博客 798

Vite 与 Webpack 对比及常见面试题

Vite 与 Webpack 对比摘要 核心区别 Vite 和 Webpack 都是前端构建工具,但设计理念不同: Webpack:基于打包模式,从入口递归构建完整依赖图,适合复杂项目 Vite:利用浏览器原生 ES Module,开发时按需编译,启动和热更新极快 关键对比 模块处理:Webpack 支持多种模块格式,Vite 专注 ESM 热更新:Vite 的 HMR 更快,基于原生 ESM 构建速度:Vite 开发模式快 10-100 倍,生产构建用 Rollup 生态:Webpack 插件更丰富,Vi

xyphf的博客 257

10天进阶webpack---(1)为什么要有webpack

既然开发时态和运行时态面临的局面有巨大的差异,因此,我们需要有一个工具,这个工具能够让开发者专心的在开发时态写代码,然后利用这个工具将开发时态编写的代码转换为运行时态需要的东西。webpack就是其中的一种。看到了很多webpack和vite的面试题,但是本人一开始看的时候看的不是很懂,别准备写一个连载博客,讲解每一个知识点和附带的webpack的面试题。

weixin_73303171的博客 452

2024 高级前端面试题之 前端工程相关 「精选篇」

2024 前端面试题之前端工程化「精选篇」

XH_jing的博客 2009

带你碾压面试官的女生,Node、webpack,前端面试

安装Vue脚手架需要先安装Node.js (安装好了的不要随意卸载Nodejs)安装Node.js:1、win+r输入cmd 或者在我的电脑打开cmd查看是否安装nodejs:node -v下载Node.js:(找到与自己电脑对应的)中文文档地址:双击打开下载好的node.js,点击next,勾选两个复选框即可查看是否安装成功:node -v 出现node.js的版本号就是已经安装成功安装Nodejs时会一起安装npm,npm的作用是对Nodejs依赖的包进行管理,也可以理解。

2401_83974199的博客 417
上一篇: HTML5 & CSS3常见新特性
下一篇: Git常见命令 GitFlow
ZoeLandia
博客等级 码龄6年 734粉丝 183原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值