当前位置: 首页 > news >正文

面试题 之 webpack

1.说说你对webpack理解?解决什么问题?

Webpack 是实现前端项目的模块化,用于现代 JavaScript 应用程序的静态模块打包工具,被webpack 直接引用的资源打包进 bunde.js的资源,当webpack 处理应用程序时,它会在内部构建一个依赖图,依赖图对应映射到项目所需的每个模块 ,并生成一个或多个 bundle
解决问题:
1️⃣编译代码能力,提高效率,解决浏览器兼容问题
2️⃣模块整合能力,提高性能,可维护性,解决浏览器频繁请求文件的问题
3️⃣模块能力,项目维护性增强,支持不同种类的前端模块类型,统一的模块化方案,所有资源文件的加载都可以通过代码控制

2.说说webpack的热更新是如何做到的?原理是什么?

模块热更新指在应用程序运行过程中,替换、添加、删除模块、而无需重新刷新整个应用。
webpack中配置开启热模块
在这里插入图片描述
更改之后css可以直接更新,js需要额外操作指定模块来热更新
在这里插入图片描述
原理总结:
通过webpack-dev-server创建两个服务器: 提供静态资源的服务express和Socket服务
express server 负责直接提供静态资源的服务(打包后的资源直接被浏览器请求和解析)
socket server 是一个 websocket 的长连接双方可以通信当socket server 监听到对应的模块发生变化时,会生成两个文件.json和.js文件
通过长连接socket server 可以直接将这两个文件主动发送给客户端(浏览器)
浏览器拿到两个新的文件后,通过HMR runtime机制,加载这两个文件,并且针对修改的模块进行更新

3.说说webpack的构建流程?

1️⃣初始化流程:
从配置文件和 Shell 语句中读取与合并参数,并初始化需要使用的插件和配置插件等执行环境所需要的参数:
2️⃣编译构建流程
从 Entry 发出,针对每个 Module 串行调用对应的 Loader 去翻译文件内容,再找到该 Module 依赖的 Module,递归地进行编译处理
3️⃣输出流程:
对编译后的 Module 组合成 Chunk,把 Chunk 转换成文件,输出到文件系统

4.说说webpack proxy工作原理?为什么能解决跨域?

webpack proxy基本行为就是接收客户端发送的请求后转发给其他服务器。通过webpack-dev-server来实现代理服务,将自动编译和自动刷新浏览器等集成在一起。webpack配置deServer属性里的proxy实现代理。
在这里插入图片描述
工作原理:
proxy 工作原理是利用 http-proxy-middleware 这个http 代理中间件,实现请求转发给其他服器。
解决跨域:在开发阶段, webpack-dev-server 会启动一个本地开发服务器,而后端服务又是运行在另外一个地址上所以在开发阶段中,由于浏览器同源策略的原因,当本地访问后端就会出现跨域请求的问题,通过设置 webpack proxy 实现代理请求后,在代理服务器传递数据给本地浏览器的过程中,两者同源,并不存在跨域行为,浏览器就能正常接收数据

相关文章:

  • STL标准模板库(C++
  • Pillow教程06:将图片中出现的黄色和红色,改成绿色
  • Android仿微信视频聊天本地与远程切换功能
  • 基于springboot+vue+Mysql的超市进销存系统
  • 【JVM】JVM 运行时数据区简介
  • IntelliJ中的非JVM技术
  • 51单片机学习笔记8 中断系统及定时器
  • 深入解析大语言模型显存占用:训练与推理
  • 【TypeScript】解决字面量类型推断错误的四种方式
  • OM6626一款低功耗蓝牙芯片SOC芯片 -电子价签蓝牙芯片
  • 高阶数据结构 <红黑树>
  • Python学习:函数
  • 【线段树二分】第十三届蓝桥杯省赛C++ A组/研究生组 Python 研究生组《扫描游戏》(C++)
  • 【JVM】JVM简介
  • 【C/C++】奇偶位互换
  • 30秒的PHP代码片段(1)数组 - Array
  • Babel配置的不完全指南
  • css的样式优先级
  • Docker入门(二) - Dockerfile
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • jquery cookie
  • LeetCode29.两数相除 JavaScript
  • miaov-React 最佳入门
  • Nacos系列:Nacos的Java SDK使用
  • vue-cli在webpack的配置文件探究
  • zookeeper系列(七)实战分布式命名服务
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • 函数计算新功能-----支持C#函数
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • (ZT)薛涌:谈贫说富
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (七)Java对象在Hibernate持久化层的状态
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • (轉)JSON.stringify 语法实例讲解
  • *Django中的Ajax 纯js的书写样式1
  • .mysql secret在哪_MySQL如何使用索引
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .net反混淆脱壳工具de4dot的使用
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • .NET文档生成工具ADB使用图文教程
  • .NET中GET与SET的用法
  • .Net组件程序设计之线程、并发管理(一)
  • @Autowired和@Resource装配
  • @基于大模型的旅游路线推荐方案
  • [AI]ChatGPT4 与 ChatGPT3.5 区别有多大
  • [Android 数据通信] android cmwap接入点
  • [ASP]青辰网络考试管理系统NES X3.5
  • [Bada开发]初步入口函数介绍