webpack 面试题整理

article/2025/9/15 7:47:58

文章目录

  • webpack 面试题整理
    • 谈谈你对Webpack的理解
    • Webpack的打包过程/打包原理/构建流程?
    • Webpack中loader的作用/ loader是什么?
      • 常见的loader有哪些?
    • Plugin有什么作用?/Plugin是什么
      • 常见的Plugin有哪些
      • Webpack 插件的执行顺序(加载机制)?
    • Webpack中Loader和Plugin的区别
    • Webpack 做过哪些优化手段?有哪些优化手段?
      • tree-shaking 删除没有使用的代码 优化前端性能/提高构建速度
        • 使用tree-shaking需要注意什么?
      • 如何利用webpack来优化前端性能?
        • Webpack如何配置压缩代码?压缩了什么?
      • 如何提高webpack的构建速度?

webpack 面试题整理

谈谈你对Webpack的理解

1.Webpack是什么?

webpack 是一个静态模块打包器,当 webpack 处理应用程序时,会递归构建一个依赖关系图,其中包含应用程序需要的每个模块,然后将这些模块打包成一个或多个 bundle。

webpack 就像一条生产线,要经过一系列处理流程(loader)后才能将源文件转换成输出结果。 这条生产线上的每个处理流程的职责都是单一的,多个流程之间有存在依赖关系,只有完成当前处理后才能交给下一个流程去处理。
插件就像是一个插入到生产线中的一个功能,在特定的时机对生产线上的资源做处理。 webpack 在运行过程中会广播事件,插件只需要监听它所关心的事件,就能加入到这条生产线中,去改变生产线的运作。

2.可以说说打包过程/构建流程
3.可以说说对前端运行的优化

Webpack的打包过程/打包原理/构建流程?

在这里插入图片描述
webpack 的运行流程是一个串行的过程,它的工作流程就是将各个插件串联起来。

命令行执行npx webpack打包命令开始
1.初始化编译参数:从配置文件和shell命令中读取与合并参数
2.开始编译:根据上一步得到的参数初始化Compiler对象,加载所有配置的Plugin,执行对象的 run 方法开始执行编译。
3.确定入口:根据配置中的 entry 找出所有的入口文件
4.编译模块:从入口文件触发,调用所有配置的Loader对模块进行翻译,再找出该模块依赖的模块,然后递归本步骤直到所有入口依赖的文件都进行翻译。
5.完成模块编译:在经过第4步使用 Loader 翻译完所有模块后,得到了每个模块被翻译后的最终内容以及它们之间的依赖关系图。
6.输出资源:根据依赖关系图,组装成一个个包含多个模块的Chunk,再把每个Chunk转化成一个单独的文件加入到输出列表,根据配置确定输出的路径和文件名,输出。

在以上过程中,Webpack 会在特定的时间点广播出特定的事件,插件在监听到感兴趣的事件后会执行特定的逻辑。

总结

  • 初始化:从配置文件和shell命令中读取与合并参数,根据参数初始化Compiler实例,加载Plugin(注册所有配置的插件),调用Compiler实例的run方法开始执行编译。

Compiler编译对象掌控者webpack生命周期,不执行具体的任务,只是进行一些调度工作。比如执行模块创建、依赖收集、分块、打包等
调用run之后,创建Compiltation实例,每次构建都会新创建一个Compiltation实例,包含了这次构建的基本信息
Webpack 会在特定的时间点广播出特定的事件,插件在监听到感兴趣的事件后会执行特定的逻辑。

  • 编译:从entry 触发,对每个Module 串行调用对应的 Loader对模块进行翻译,再找出该模块依赖的模块,递归进行编译处理。

从配置文件( webpack.config.js )中指定的 entry 入口,开始解析文件构建 AST 语法树

  • 根据依赖关系图,组装成包含多个模块的Chunk,将个Chunk转换成文件输出。

不同entry生成不同chunk,动态导入也会生成自己的chunk

Webpack中loader的作用/ loader是什么?

Loader 是webpack中提供了一种处理多种文件格式的机制,因为webpack只认识JS和JSON,所以Loader相当于翻译官,将其他类型资源进行预处理。
用于对模块的"源代码"进行转换。
loader支持链式调用,**调用的顺序是从右往左。**链中的每个loader会处理之前已处理过的资源,最终变为js代码。
可以通过 loader 的预处理函数,为 JavaScript 生态系统提供更多能力。

常见的loader有哪些?

  • less-loader:将less文件编译成css文件

开发中,我们常常会使用less预处理器编写css样式,使开发效率提高

  • css-loader:将css文件变成commonjs模块加载到js中,模块内容是样式字符串
  • style-loader: 创建style标签,将js中的样式资源插入标签内,并将标签添加到head中生效
  • ts-loader: 打包编译Typescript文件

Plugin有什么作用?/Plugin是什么

Plugin功能更强大,主要目的就是解决loader 无法实现的事情,比如打包优化和代码压缩等。
Plugin加载后,在webpack构建的某个时间节点就会触发plugin定义的功能,帮助webpack做一些事情。实现对webpack的功能扩展。

常见的Plugin有哪些

  • html-webpack-plugin 处理html资源,默认会创建一个空的HTML,自动引入打包输出的所有资源(js/css)
  • mini-css-extract-plugin 打包过后的css在js文件里,该插件可以把css单独抽出来
  • clean-webpack-plugin 每次打包时候,CleanWebpackPlugin 插件就会自动把上一次打的包删除

Webpack 插件的执行顺序(加载机制)?

Webpack中Loader和Plugin的区别

总说
webpack 就像一条生产线,要经过一系列处理流程(loader)后才能将源文件转换成输出结果。 这条生产线上的每个处理流程的职责都是单一的,多个流程之间有存在依赖关系,只有完成当前处理后才能交给下一个流程去处理。
插件就像是一个插入到生产线中的一个功能,在特定的时机对生产线上的资源做处理。 webpack 在运行过程中会广播事件,插件只需要监听它所关心的事件,就能加入到这条生产线中,去改变生产线的运作。

或者分别使用之前的总结说Loader和Plugin是什么

运行时机
1.loader运行在编译阶段
2.plugins 在整个周期都起作用
在这里插入图片描述

使用方式
Loader:1.下载 2.使用
Plugin:1.下载 2.引用 3.使用

Webpack 做过哪些优化手段?有哪些优化手段?

如何利用webpack来优化前端性能? 问的是生产环境优化
如何提高webpack的构建速度? 问的是构建速度的优化

tree-shaking 删除没有使用的代码 优化前端性能/提高构建速度

tree-shaking是一种基于 ES Module 规范的 Dead Code Elimination 技术打包,在打包过程中检测工程中没有引用过的模块并进行标记,删除没有引用过的模块,提高构建速度,较少程序运行时间。

使用tree-shaking需要注意什么?

1.默认mode = production ,生产环境默认开启tree-shaking功能。
2.需要是使用 ES6 规范编写模块代码,ES6的模块依赖关系是确定的,和运行时状态无关
3.尽量不写带有副作用的代码。如编写了立即执行函数,在函数里使用了外部变量等。

关于副作用

如何利用webpack来优化前端性能?

  • 代码压缩

按需加载

  • 代码分割 splitChunks - 在optimization配置项中配置

1.可以将node__mudules中代码单独打包成一个chunk输出(比如使用了jqury?)
2.会自动分析多入口chunk中,有没有公共的文件,如果有会打包成单独的一个chunk不会重复打包

  • 使用Dll进行分包

正常情况下node_module会被打包成一个文件
使用dll技术,对可以将那些不常更新的框架和库进行单独打包,生成一个chunk

  • 使用路由懒加载

在代码中所有被 import()函数引用的模块,都将打成一个单独的包,放在 chunk 存储的目录下。在浏览器运行到这一行代码时,就会自动请求这个资源,实现异步加载。

Webpack如何配置压缩代码?压缩了什么?

1.在optimization配置项中来配置该插件作为压缩器进行压缩。
2.在plugins里使用该插件进行压缩

js压缩:利用terser-webpack-plugin
css压缩:利用了optimize-css-assets-webpack-plugin 插件

删除了console、注释、空格、换行、没有使用的css代码等

如何提高webpack的构建速度?

思路1:减少需要构建的文件或代码

  • HMR(Hot Module Replacement) 模块热替换只重新构建发生变化的模块 – 开发环境中
  • 缩小处理范围:合理利用这两个属性exclude:不需要处理的文件 和 include:需要处理的文件
  • babel缓存 第二次构建时,会读取之前的缓存,只重新构建变化的文件
  • 使用Dll进行分包 --> 分包方便按需加载

正常情况下node_module会被打包成一个文件
使用dll技术,对可以将那些不常更新的框架和库进行单独打包,生成一个chunk
项目源代码也需要拆分,可以根据路由来划分打包文件 --> 怎么实现路由懒加载?webpack中如何实现组件异步加载?

思路2:多进行进行构建

  • 多进程打包 thread-loader,将其放在费时的loader之前

进程启动和进程通信都有开销,工作时间比较长,才需要多进程打包


http://chatgpt.dhexx.cn/article/QTqvSw9X.shtml

相关文章

28道Webpack面试题及答案

1、webpack的作用是什么,谈谈你对它的理解? 现在的前端网页功能丰富,特别是SPA(single page web application 单页应用)技术流行后,JavaScript的复杂度增加和需要一大堆依赖包,还需要解决Scss&a…

程序员做自媒体变现,可以选择的平台有哪些?各自的特点是什么?

📚公众号:Python图书馆 (ID:python_library)整理:💻兆锋 利益相关:我是一个在做自媒体的Python程序员,个人全网同名自媒体:Python自动化办公社区 本文分享自己使用的几个平台,并分析…

5个免费的高质量的自媒体学习网站,你值得拥有

今天就和大家分享5个我私下一直在用的学习网站,有些平台知道的人还不多,希望大家高调收藏,低调使用。 1 易撰网 自媒体必备网站,不管你做的是哪个方面的自媒体。都可以利用这款强大的文章写作工具,其中包括爆文分析、…

自媒体影视解说项目详解

我见过很多老师写项目,但很少有人愿意完整、毫无保留地透露项目运作的细节。尤其注意事项和避坑细节。 欣慧在写项目上的观点是,要么不写,要么写得让人明白,不隐瞒。 今天给大家分享一个自媒体影视解说一个盈利项目,零成本认真执行,年收入10万没有问题。 2018年第一次注…

《最强的 VLC 多媒体开发教程》

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 《VLC 多媒体开发》,是一个专注于 libVLC 开发的专栏,里面共包含几十个章节,从 0 到 1,图文并茂,详细地介绍了 lib…

入行自媒体怎么快速变现,详细教程,教你手把手运营

新手怎样做自媒体,才能达到日入500 ?今天就给大家介绍一下,新手入行自媒体怎么快速变现,详细的自媒体教程,教你手把手运营! 01 自媒体账号注册 账号注册其实很简单,直接浏览器搜索平台&#xf…

教你如何轻松玩转自媒体淘客,赚大钱!

“淘宝客“现在可谓是一种很流行的兼职,无论何时学生、上班族、自由职业等,都可以利用兼职来赚钱,但是也有很多人赚不到钱,为什么没有赚到钱,原因很简单:1、推广的商品没人购买,2、没有推广方法…

7个良心到难以置信的自媒体免费网站推荐

现在做自媒体还不晚,自媒体已经是成熟的阶段,所以大家可以积极参与进去,说不定哪天爆火了,小伙伴们抓住机会吧!下面就和大家分享一下自媒体创作中需要用到的一些网站,助您打造爆款作品: 1、Cove…

如何拍摄自媒体?这些技巧可以帮到你

很多初入自媒体的小伙伴,对于如何拍摄自媒体还是十分模糊的,针对一些拍摄问题给大家分享一下相关技巧: 一、拍摄器材 1.手机或者单反相机 许多初学者在一开始拍摄短视频的情况下,总感觉应当挑选单反相机或是监控摄像头才可以作出…

同一篇文章多平台发布?自媒体多平台发布教程分享

如今自媒体行业的发展是十分火热的,加入到这个行业中的朋友越来越多,很多朋友都在自媒体平台撰写文章,如果文章具有价值,能够吸引读者,则作者就能够通过撰写文章赚取收益,自媒体平台并不是单一的&#xff0…

趣头条自媒体审核不过怎么办,趣头条伪原创工具教程

为了维护自媒体平台的和谐与健康,也是为了尽量的公平维护大多数自媒体作者的权益,趣头条的要求越来越高,审核力度也越来越大,而针对视频内容也开始有了明确的规定。 视频主要出现问题的分别是标题,封面,内容。 趣头条平台在公告中为学弟学妹们着重说明了以下几点: 1.…

比较好的自媒体平台推荐,揭秘哪个自媒体平台收入最高

如今,自媒体平台越来越多,对自媒体感兴趣,在自媒体路上赚到钱的人也越来越多,那么,面对如雨后春笋般的新型自媒体平台,我们究竟该如何选择合适自己的呢? 今天凯哥来聊聊新人进入自媒体,想通过平台来赚取广告分成的话,该如何选择适合自己的自媒体平台。 一、头条号 今日…

自媒体怎么快速入门?这几个技巧一定要掌握好

自媒体新手应该怎么快速学会自媒体运营,今天小编就给大家找了几个自媒体入门快速入门的技巧,一起来看看: 1、需要打造自己的影响力,但是时间可能需要久一点,半年以上。那么在这半年里不要考虑商业化和广告变现等问题&a…

怎么做自媒体,这份入门攻略,建议收藏

1. 选择合适的平台 现在的自媒体平台非常多,有短视频平台、长视频平台、图文平台等,你可以依照自己的喜好去选择,不过要尽量选择用户量大一些的,也可以直接多个平台分发。 2. 确定领域 这是很关键的一步,你要选择你擅…

如何做抖音自媒体?这些小技巧一定要掌握

当今时代,几乎每个人的手机上都会有抖音这个app,所以在当下抖音还是很有发展的前景的,今天就教教大家如何做好抖音自媒体,其实但凡一个视频能够火的原因有:首先这个视频内容能够解决一部分人的痛点,比如美妆博主&#…

自媒体全套教程+全套工具(带教程)+原创实操教程

问题0:现在还适合做自媒体吗? 回答这个问题前,我认为有这个疑问的朋友可以去百度一下什么是“社交电商”,简单点说就是通过社交平台卖产品、卖服务。 传统电商、随着时代的发展竞争越来越大,获客成本越来越高。而自媒体…

查看微信小程序网页源代码

一、安装及启用X5内核 要强制微信使用 X5 内核,打开网页及小程序用 com.tencent.tbs.core.webkit.WebView,这样才能开启调试。下面一些开启调试的指令,直接用手机微信访问下面的网站,开启调试模式,修改配置后记得重启…

悄悄告诉你如何获取别人小程序的源代码(包含wxml,wxss) 绝对有效

1. 安装软件 (1)夜神模拟器 (2)node.js 运行环境 (相信干这行的你早就下了吧) (3)反编译的脚本 链接:https://pan.baidu.com/s/10Yic6oj1dw6wdcd_bzHCbw 提取码&#…

点餐系统小程序源码|小程序点餐系统

随着餐厅消费者对在线订购的需求不断增长,每个餐厅也需要找到让客户浏览菜单、选择选项并在线支付外卖或送货订单的解决方案。简单的在线食品订购系统具有管理端和访客客户端。管理员将管理网站所需的所有数据,更重要的是可用菜单列表。 演示&#xff1a…

开发微信小程序,就是这么简单!可自动生成微信小程序源代码,配套JS SDK、接口和后台

开发微信小程序,就是这么简单!自己动手,丰衣足食! 开发微信小程序有多简单?
 你只需要掌握前端开发,就可以轻松开发自己的微信小程序,实现自己的业务功能。借助果创云,无须域名、无…