iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >webpack面试题及答案实例分析
  • 715
分享到

webpack面试题及答案实例分析

2023-07-05 08:07:29 715人浏览 八月长安
摘要

这篇“webpack面试题及答案实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“WEBpack面试题及答案实例分析”文

这篇“webpack面试题及答案实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“WEBpack面试题及答案实例分析”文章吧。

谈谈你对Webpack的理解

1.Webpack是什么?

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

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

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

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

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 在整个周期都起作用
webpack面试题及答案实例分析

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

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

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

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

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

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

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

关于副作用

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

  • 代码压缩

按需加载

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

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

  • 使用Dll进行分包

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

  • 使用路由懒加载

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

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

在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之前

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

以上就是关于“webpack面试题及答案实例分析”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: webpack面试题及答案实例分析

本文链接: https://www.lsjlt.com/news/350469.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • webpack面试题及答案实例分析
    这篇“webpack面试题及答案实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“webpack面试题及答案实例分析”文...
    99+
    2023-07-05
  • php算法面试题及答案示例的分析
    这篇文章将为大家详细讲解有关php算法面试题及答案示例的分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。php有什么用php是一个嵌套的缩写名称,是英文超级文本预处理语言,它的语法混合了C、Java、P...
    99+
    2023-06-06
  • 【整理分享】一些webpack面试题(附答案解析)
    编译:从entry 触发,对每个Module 串行调用对应的 Loader对模块进行翻译,再找出该模块依赖的模块,递归进行编译处理。从配置文件( webpack.config.js )中指定的 entry 入口,开始解析文件构建 AST 语...
    99+
    2023-05-14
    面试题 webpack
  • php面试题及答案
    1 请输出下面代码执行结果 答案:1 复制 讲解:count(var)是用来统计数组或对象的元素个数的。当var是null或者空数组时,结果为0。如果var是普通变量,则返回1。正常情况下返回var中的元素或属性个数。 2 请说明ph...
    99+
    2023-09-10
    php 开发语言
  • 分享有关spring boot面试题及答案
    这篇文章主要介绍“分享有关spring boot面试题及答案”,在日常操作中,相信很多人在分享有关spring boot面试题及答案问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2024-04-02
  • PHP面试题汇总及答案
    PHP程序员经典面试问题 1、PHP的意思,它能干些什么 PHP是一个基于服务端来创建动态网站的脚本语言,您可以用PHP和HTML生成网站主页,英文的全称(Professional Home Pages) (1)WEB开发、实现订单、网络通...
    99+
    2023-08-31
    php 开发语言
  • php算法面试题及答案
    PHP的基础知识点 PHP中类的继承属于单继承,一个子类只能继承一个父类。可见性为public protected的属性和方法可以被继承。 继承的方法或属性可以被重写,可见性越来越大。 PHP中的变量名区分大小写,但类名、函数名不区分大小...
    99+
    2023-08-31
    php 服务器 开发语言
  • 百度php面试题及答案
    基础题: 1.表单中 get与post提交方法的区别 答:get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据,可以通过表单提交大量信息. session与cookie的区别 答:session:储存用户访问的全局唯...
    99+
    2023-10-01
    php 数据库 开发语言
  • web前端面试问答题实例代码分析
    这篇文章主要介绍“web前端面试问答题实例代码分析”,在日常操作中,相信很多人在web前端面试问答题实例代码分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”web前端面试问答题实例代码分析”的疑惑有所帮助!...
    99+
    2023-07-05
  • Vue.js面试题及答案有哪些
    这篇文章主要介绍了Vue.js面试题及答案有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue.js面试题及答案有哪些文章都会有所收获,下面我们一起来看看吧。一、Vue.js基本问题1.1.Vue 响应式...
    99+
    2023-07-02
  • GO面试题及答案有哪些
    这篇文章主要介绍“GO面试题及答案有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“GO面试题及答案有哪些”文章能帮助大家解决问题。slice 扩容机制GO1.17版本及之前当新切片需要的容量ca...
    99+
    2023-07-04
  • SQL有哪些面试题及答案
    本篇内容主要讲解“SQL有哪些面试题及答案”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQL有哪些面试题及答案”吧!到此,相信大家对“SQL有哪些面试题及答案...
    99+
    2024-04-02
  • Dubbo面试题及答案有哪些
    本篇内容介绍了“Dubbo面试题及答案有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  1、Dubbo是什么  Dubbo是一个分布式...
    99+
    2023-06-04
  • PHP有哪些面试题及答案
    今天小编给大家分享一下PHP有哪些面试题及答案的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、什么事面向对象?主要特征是什...
    99+
    2023-07-02
  • ActiveMQ面试题及答案有哪些
    这篇文章主要介绍“ActiveMQ面试题及答案有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“ActiveMQ面试题及答案有哪些”文章能帮助大家解决问题。    1、什么是 ...
    99+
    2023-06-04
  • Python有哪些面试题及答案
    本篇内容主要讲解“Python有哪些面试题及答案”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python有哪些面试题及答案”吧!Q1、Python中的列表和元组有什么区别?Q2、Python的...
    99+
    2023-07-02
  • Python面试题及答案:12个 Python 程序员面试必备问题与答案
    这段时间很多伙伴问我有没有关于Python的面试题和答案,哈哈哈,7月确实也是面试跳槽的高峰哈!这两天总结了一下,这12个Python面试题和答案是必考的,给大家列了下来,认真看哈!...
    99+
    2023-06-02
  • Kubernetes面试题及答案有哪些
    本篇内容介绍了“Kubernetes面试题及答案有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  1、什么是Kubernetes  K...
    99+
    2023-06-04
  • SpringBoot有哪些面试题及答案
    这篇文章主要介绍“SpringBoot有哪些面试题及答案”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringBoot有哪些面试题及答案”文章能帮助大家解决问题。1. 什么是 Spring Bo...
    99+
    2023-07-05
  • Vue面试题及答案有哪些
    这篇文章主要介绍了Vue面试题及答案有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue面试题及答案有哪些文章都会有所收获,下面我们一起来看看吧。1. 简述 Vue 生命周期答题思路:Vue 生命周期是什...
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作