webpack的面试题(吐血整理)

article/2025/9/15 7:52:01

 以下为整理的webpack面试题,如有不足之处,还请大家多多指正。

一、webpack的构建流程

二、对webpack的理解

        webpack是一个打包模块化js的工具,在webpack里一切文件皆模块,通过loader转换文件,通过plugin注入钩子,最后输出由多个模块组合成的文件,webpack专注构建模块化项目。        

        webPack可以看做是模块的打包机器:它做的事情是,分析你的项目结构,找到js模块以及其它的一些浏览器不能直接运行的拓展语言,例如:Scss,TS等,并将其打包为合适的格式以供浏览器使用。

三、如何提高webpack的构建速度?

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

五、代码分割的本质是什么?

        代码分割的本质就是在源代码直接上线和达成唯一脚本main.bundle.js这两种极端方案之间的一种更适合实际场景的中间状态。
        源码直接上线:虽然过程可控,但是http请求多,性能开销大。
        打包成唯一脚本:服务器压力小,但是页面空白期长,用户体验不好。

六、Webpack的基本功能有哪些?

名称内容
代码转换TypeScript编译成JavaScript、SCSS编译成CSS等。
文件优化压缩JavaScript、csS、html代码,压缩合并图片等。
代码分割提取多个页面的公共代码、提取首屏不需要执行部分的代码让其异步加载。
模块合并在采用模块化的项目有很多模块和文件,需要构建功能把模块分类合并成一个文件。
自动刷新监听本地源代码的变化,自动构建,刷新浏览器。
代码校验在代码被提交到仓库前需要检测代码是否符合规范,以及单元测试是否通过。
自动发布更新完代码后,自动构建出线上发布代码并传输给发布系统。

七、文件指纹是什么?

        文件指纹是打包之后的文件后缀名。

        chunkhash:和webpack打包的chunk有关,不同的entry会生出不同的chunkhash。

                js后缀名:filename:'[name][chunkhash:8].js',

        contenthash:根据文件内容来定义hash,文件内容不变,则其不变。

                css后缀名:filename:'[name][contenthash:8].css',

        hash:和整个项目构建有关,只要项目文件有修改,整个构建的hash值就会修改。

                img后缀名:name:'[name][hash:8].[ext]',

八、source map是什么?

        将编译,打包,压缩后的代码映射回源码的过程,打包压缩后的代码不具有良好的可读性,想要调试源码就需要soucre map。

        线上环境:避免在生产中使用inline-和eval-,因为他们会增加bundle体积大小,并降低整体性能。

        1、hidden-source-map:借助第三方错误监控平台Sentry使用。

        2、nosources-source-map:只会显示具体行数以及查看源代码的错误栈。安全性比source map高。

        3、source map通过nginx设置将.map文件只对白名单开放(公司内网)。

九、说一下loader

        loader 用于对模块的源代码进行转换。本质上是一个函数,在函数中对接收到的内容进行转化,返回转化后的结果。webpack只认识js,json,loader就成了翻译官。

常用lodaer

file-loader把⽂件输出到⼀个⽂件夹中,在代码中通过相对 URL 去引⽤输出的⽂件。
url-loader和 file-loader 类似,但是能在⽂件很⼩的情况下以 base64 的⽅式把⽂件内容注⼊到代码中去。
source-map-loader加载额外的 Source Map ⽂件,以⽅便断点调试。
image-loader加载并且压缩图⽚⽂件。
babel-loader将ES6转化为ES5。
css-loader加载 CSS,⽀持模块化、压缩、⽂件导⼊等特性。
style-loader把 CSS 代码注⼊到 JavaScript 中,通过 DOM 操作去加载 CSS。
eslint-loader 通过 ESLint 检查 JavaScript 代码。
less-loader可以打包处理.less相关的文件。
sass-loader可以打包处理.scss相关的文件。

十、如何保证各个loader按照预想方式工作?
    可以使用enforce强制执行loader的作用顺序,pre代表在所有正常loader之前执行,post是所有之后执行。

十一、说一下plugins

        webpack 插件是一个具有 apply 属性的 JavaScript 对象。apply 属性会被 webpack compiler 调用,并且 compiler 对象可在整个编译生命周期访问。

        由于插件可以携带参数/选项,必须在 webpack 配置中,向 plugins 属性传入 new 实例。

十二、描述一下编写loader或plugin的思路
        loader像一个“翻译官”,把读到的源文件内容转义成新的文件内容,并且每个loader通过链式操作,把源文件一步步翻译成想要的样子。
        编写loader要遵循单一原则,每个loader只做一种“转义”工作,每个loader拿到的是源文件内容(source),可以通过返回值的方式将处理后的内容输出,也可以调用this.callback()方法,将内容返回给webpack。还可以通过this.async()生成一个callback函数,再用它将处理后的内容输出去。此外webpack还为开发者准备了开发loader的工具函数集——loader-utils。
        plugin编写比较灵活。webpack在运行的生命周期中会广播出许多事件,plugin可以监听这些事件,在合适的时机通过webpack提供的API改变输出结果。

 十三、bundle、chunk、module分别是什么?
        bundle:是由webpack打包出来的文件
        chunk:代码块,一个 Chunk 由多个模块组合而成,用于代码合并与分割,这些模块是从入口模块通过依赖分析得来的。
        module:模块,在 Webpack 里一切皆模块,一个模块对应着一个文件。Webpack 会从配置的 Entry 开始递归找出所有依赖的模块。

 十四、文件监听原理是什么?

        在发现源码发生变化时,自动重新构建出新的输出文件。
        原理
        轮询判断文件的最后编辑时间是否变化,如果某个文件发生了变化,并不会立刻告诉监听者,而是先缓存起来,等aggregateTimeout后再执行。
        方式
        启动 webpack 命令时,带上 --watch 参数。
        在配置 webpack.config.js 中设置 watch:true。
        缺点
        每次需要手动刷新浏览器。

module.export = {// 默认false,也就是不开启watch: true,// 只有开启监听模式时,watchOptions才有意义watchOptions: {// 默认为空,不监听的文件或者文件夹,支持正则匹配ignored: /node_modules/,// 监听到变化发生后会等300ms再去执行,默认300msaggregateTimeout:300,// 判断文件是否发生变化是通过不停询问系统指定文件有没有变化实现的,默认每秒问1000次poll:1000}}

十五、模块打包原理是什么?
        webpack 实际上为每个模块创造了一个可以导出和导入的环境,本质上并没有修改 代码的执行逻辑,代码执行顺序与模块加载顺序也完全一致。

十六、什么是webpack热更新原理?

        webpack的热更新又称热替换(Hot Module Replacement),缩写为HMR。 这个机制可以做到不用刷新浏览器而将新变更的模块替换掉旧的模块。
        HMR的核心就是客户端从服务端拉去更新后的文件,准确的说是 chunk diff (chunk 需要更新的部分),实际上 WDS 与浏览器之间维护了一个Websocket,当本地资源发生变化时,WDS 会向浏览器推送更新,并带上构建时的 hash,让客户端与上一次资源进行对比。客户端对比出差异后会向 WDS 发起Ajax请求来获取更改内容(文件列表、hash),这样客户端就可以再借助这些信息继续向 WDS 发起jsonp请求获取该chunk的增量更新。 

十七、如何对bundle体积进行监控和分析?
        VSCode中有一个插件Import Cost可以帮助我们对引入模块的大小进行实时监测,还可以使用webpack-bundle-analyzer生成bundle的模块组成图,显示所占体积。
        bundlesize工具包可以进行自动化资源体积监控。 

十八、Bable原理是什么?

        大多数JavaScript Parser遵循estree规范,Babel 最初基于acorn项目(轻量级现代 JavaScript 解析器) Babel大概分为三大部分:
        转换
        访问 AST 的节点进行变换操作生产新的 AST。

                词法分析:将代码(字符串)分割为token流,即语法单元成的数组。
                语法分析:分析token流(上面生成的数组)并生成 AST。        
        生成
        以新的 AST 为基础生成代码。

                Taro就是利用 babel 完成的小程序语法转换。
        解析
        将代码转换成 AST。


http://chatgpt.dhexx.cn/article/66yDErtd.shtml

相关文章

webpack 面试题整理

文章目录 webpack 面试题整理谈谈你对Webpack的理解Webpack的打包过程/打包原理/构建流程?Webpack中loader的作用/ loader是什么?常见的loader有哪些? Plugin有什么作用?/Plugin是什么常见的Plugin有哪些Webpack 插件的执行顺序&a…

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…