webpack打包原理

  • 将所有依赖打包成一个bundle.js,通过代码分割成单元片段按需加载

什么是webpack,与gulp,grunt有什么区别

  • webpack是一个模块打包工具,可以递归地打包项目中的所有模块,最终生成几个打包后的文件。
  • 区别:webpack支持代码分割,模块化(AMD,CommonJ,ES2015),全局分析

webpack 和 gulp 的区别?

  • webpack是一个模块打包器,强调的是一个前端模块化方案,更侧重模块打包,我们可以把开发中的所有资源都看成是模块,通过loader和plugin对资源进行处理。
  • gulp是一个前端自动化构建工具,强调的是前端开发的工作流程,可以通过配置一系列的task,第一task处理的事情(如代码压缩,合并,编译以及浏览器实时更新等)。然后定义这些执行顺序,来让glup执行这些task,从而构建项目的整个开发流程。自动化构建工具并不能把所有的模块打包到一起,也不能构建不同模块之间的依赖关系。

什么是entry,output

  • entry 入口,告诉webpack要使用哪个模块作为构建项目的起点,默认为./src/index.js
  • output 出口,告诉webpack在哪里输出它打包好的代码以及如何命名,默认为./dist

什么是loader,plugins

  • loader是用来告诉webpack如何转换某一类型的文件,并且引入到打包出的文件中。
  • plugins(插件)作用更大,可以打包优化,资源管理和注入环境变量
  • loader: loader是文件加载器,能够加载资源文件,直接对文件进行操作,最后进行打包, 处理一个文件可以使用多个loader,loader的执行顺序是和本身的顺序是相反的,即最后一个loader最先执行,第一个loader最后执行。 第一个执行的loader接收源文件内容作为参数,其他loader接收前一个执行的loader的返回值作为参数。最后执行的loader会返回此模块的JavaScript源码
  • plugin: webpack启动后,在读取配置的过程中会执行new MyPlugin(options)初始化一个MyPlugin获取其实例 · 在初始化compiler对象后,就会通过compiler.plugin(事件名称,回调函数)监听到webpack广播出来的事件 · 并且可以通过compiler对象去操作webpack 虽然俩者都可以对webpack进行一定的拓展,但是loader更像是一个转换器,直接操作文件进行转换 。plugin是一个扩展器,它丰富了wepack本身,针对于loader结束后,webpack打包的整个过程,它并不直接操作文件,而是基于事件机制工作,会监听webpack打包过程中的某些节点,

什么是bundle,chunk,module

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

webpack-dev-server和http服务器如nginx有什么区别

webpack-dev-server使用内存来存储webpack开发环境下的打包文件,并且可以使用模块热更新,相比传统http服务器开发更加简单高效

什么是模块热更新

webpack的一个功能,可以使代码修改后不用刷新浏览器就自动更新,高级版的自动刷新浏览器,devServer中通过hot属性可以控制模块的热替换

webpack的环境拆分

环境拆分:主要有两种方式

  • 第一种方式是将开发环境配置和生成环境配置分离,并配置一个公共配置,在对应的环境下调用 merge方法将公共配置的内容merge到当前环境的配置中,实现环境分离;

  • 第二种方式是开发环境和生成环境配置写在同一个文件中,通过在script脚本中设置NODE_ENV区分当前环境,在配置文件中通过 process.env.NODE_ENV 获取当前环境,调用对应的配置。需要注意window在使用NODE_ENV时可能会出现问题,可以安装cross-env 并配置在script脚本中解决该问题。

webpack-dev-server的作用

webpack-dev-server是webpack官方提供的一个小型Express服务器。使用它可以为webpack打包生成的资源文件提供web服务。

webpack-dev-server 主要提供两个功能:

1.为静态文件提供web服务

2.自动刷新和热替换(HMR)

自动刷新指当修改代码时webpack会进行自动编译,更新网页内容

热替换指运行时更新各种模块,即局部刷新

dev-server是怎么跑起来的

webpack-dev-server支持两种模式来自动刷新页面

  • iframe模式(页面放在iframe中,当发送改变时重载) 无需额外配置,只要以这种格式url访问即可。http://localhost:8080/webpack-dev-server/index.html
  • inline模式(将webpack-dev-server的客户端入口添加到bundle中) inline模式下url不用发生变化,但启动inline模式分两种情况
// 以命令行启动webpack-dev-server有两种方式
// 方式1 在命令行中添加--inline命令
// 方式2 在webpack-config.js添加devServer:{inline: true}
// 以node.js API启动有两种方式
// 方式1 添加webpack-dev-server/client?http://localhost:8080/到webpack配置的entry入口点
config.entry.app.unshift("webpack-dev-server/client?http://localhost:8080/");
// 将<script src="http://localhost:8080/webpack-dev-server.js"></script>添加到html文件中

使用过webpack里面哪些plugin和loader

loader

  • babel-loader: 将ES6+转移成ES5-
  • css-loader,style-loader:解析css文件,能够解释@import url()等
  • file-loader:直接输出文件,把构建后的文件路径返回,可以处理很多类型的文件
  • url-loader:打包图片

什么是长缓存?在webpack中如何做到长缓存优化

  • 浏览器在用户访问页面的时候,为了加快加载速度会对用户访问的静态资源进行存储,但是每一次代码升级或更新都需要浏览器下载新的代码,最简单方便的方式就是引入新的文件名称。
  • webpack中可以在output中指定chunkhash,并且分离经常更新的代码和框架代码。通过NameModulesPlugin或HashedModuleIdsPlugin使再次打包文件名不变

什么是Tree-shaking?CSS可以Tree-shaking

Tree-shaking是指在打包中取出那些引入了但在代码中没有被用到的死代码。

webpack中通过uglifysPlugin来Tree-shaking JS。CSS需要使用purify-CSS

如何提高webpack的构建速度

  1. 通过externals配置来提取常用库

  2. 利用DllPlugin和DllReferencePlugin预编译资源模块 通过DllPlugin来对那些我们引用但是绝对不会修改的npm包来进行预编译,再通过DllReferencePlugin将预编译的模块加载进来。

  3. 使用Happypack 实现多线程加速编译

  4. babel-loader在执行的时候,可能会产生一些运行期间重复的公共文件,造成代码体积大冗余,同时也会减慢编译效率,可以加上cacheDirectory参数或使用 transform-runtime 插件试试

  5. 不需要打包编译的插件库换成全局"script"标签引入的方式,比如jQuery插件,react, react-dom等,代码量是很多的,打包起来可能会很耗时,可以直接用标签引入,然后在webpack配置里使用 expose-loader 或 externals 或 ProvidePlugin 提供给模块内部使用相应的变量

  6. 优化构建时的搜索路径 在webpack打包时,会有各种各样的路径要去查询搜索,我们可以加上一些配置,让它搜索地更快,比如说,方便改成绝对路径的模块路径就改一下,以纯模块名来引入的可以加上一些目录路径
    还可以善于用下resolve alias别名 这个字段来配置,还有exclude等的配置,避免多余查找的文件,比如使用babel别忘了剔除不需要遍历的

关于webpack的面试题总结 - 知乎 (zhihu.com)

关于 webpack 的面试题有哪些? - 知乎 (zhihu.com)

(2条消息) webpack的面试题总结_AC总有一天的博客-CSDN博客_webpack面试

关于 webpack 的面试题有哪些?

https://blog.csdn.net/weixin_52139094/article/details/117821871?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162532582416780274126313%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162532582416780274126313&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v29-7-117821871.pc_search_result_cache&utm_term=webpack+%E9%9D%A2%E8%AF%95%E9%A2%98&spm=1018.2226.3001.4187

2021 最新 webpack 面试题相关推荐

  1. 前端面试题——2021最新企业面试题

    2021最新企业面试题 对MVVM的理解 浏览器的渲染机制 事件循环机制(Event Loop) 宏任务和微任务(先执行微观任务,再执行宏观任务) 你对Promise的理解 数组的常用方法 虚拟DOM ...

  2. 2021最新 MySQL面试题精选(附刷题小程序)

    推荐使用小程序阅读 为了能让您更加方便的阅读 本文所有的面试题目均已整理至小程序<面试手册> 可以通过微信扫描(或长按)下图的二维码享受更好的阅读体验! 最近梳理汇总了Java面试常遇到的 ...

  3. 2021最新 SpringBoot面试题精选(附刷题小程序)

    推荐使用小程序阅读 为了能让您更加方便的阅读 本文所有的面试题目均已整理至小程序<面试手册> 可以通过微信扫描(或长按)下图的二维码享受更好的阅读体验! 文章目录 推荐使用小程序阅读 1. ...

  4. 阿里P8面试官总结的《2021最新java面试题》,搞定90%以上的技术面

    本文档是从阿里面试官整理的Java面试题:包含了Java基础.Java集合容器.Java异常.并发编程.JVM.Spring.Spring MVC.Spring Boot.Spring Cloud.M ...

  5. 2021最新—Swift面试题

    #初级 String 与 NSString 的关系与区别 怎么获取一个 String 的长度 如何截取 String 的某段字符串 throws 和 rethrows 的用法与作用 try? 和 tr ...

  6. 2021最新大厂面试题集锦

    对java面试而言,面试前的准备一定要有面试题收集和学习这一项,因为在招聘公司看来,对java工程师职位的最大关注就是专业知识和技能水平的考察,所以程序员去公司面试,无论怎样都要先做一套面试题.对于不 ...

  7. 2021最新 RocketMQ面试题精选(附刷题小程序)

    推荐使用小程序阅读 为了能让您更加方便的阅读 本文所有的面试题目均已整理至小程序<面试手册> 可以通过微信扫描(或长按)下图的二维码享受更好的阅读体验! 最近梳理汇总了Java面试常遇到的 ...

  8. 2021最新Java面试题(Hibernate面试题、MyBatis面试题、Spring面试题、SpringMVC面试题)

    1.什么是 ORM 框架? 答:对象-关系映射(Object-Relational Mapping,简称ORM),面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境 ...

  9. 看完直接怼产品经理!2021最新Java笔试题及答案

    前言 Spring让我们可以更快,更轻松,更安全地进行Java编程.Spring对速度,简单性和生产率的关注使其成为世界上最受欢迎的Java框架. 像阿里巴巴,亚马逊,谷歌,微软等在内的所有科技巨头对 ...

最新文章

  1. 数据结构与算法JavaScript描述——使用队列
  2. C语言面试基础知识整理
  3. 人生苦短,我用python,为什么选择python,python简介
  4. 牛客一 G-Game of Swapping Numbers
  5. ppt页面样式html,PPT排版:一页PPT做出8种样式
  6. boost::partial_sort相关的测试程序
  7. Spring aop 记录操作日志 Aspect 自定义注解
  8. 【分布式】Zookeeper序列化及通信协议
  9. spring5.0学习笔记3
  10. 2022年Mathorcup数学建模挑战杯C题比赛心得总结(1)——A*算法的应用与优化(含Matlab代码)
  11. iOS应用出现未验证应用的问题排查
  12. 英语专业转行计算机可以吗,英语专业转行学IT,从“小白”到月薪10k+,她做到了!...
  13. 关于各种校园网,局域网等出现IP识别错误(169IP开头)及其导致的联网失败,DNS错误的解决方法
  14. 小米路由器 内核 linux,小米路由器配置ssh登入方法教程
  15. java 运行时获取泛型真实类型
  16. gpg: keyserver timed out
  17. 江西省抚州市谷歌高清卫星地图下载
  18. lol老是闪退到桌面_win10
  19. 通过光盘安装Ubuntu18.04教程
  20. c#语言程序翻译软件,百度翻译新API C#代码(winfrom,webform....)小程序-Go语言中文社区...

热门文章

  1. 【软件相关】如何用PS调整图片的亮度
  2. python金融数据分析与挖掘实战 黄恒秋_Python金融数据分析与挖掘实战
  3. 基于pytorch框架用resnet101加GPT搭建AI玩王者荣耀
  4. 当一个女孩手机话费余额不足时
  5. 钢琴键盘excel_如何通过键盘在Excel中插入新行?
  6. 深入理解 WKWebView (渲染篇) —— DOM 树的构建
  7. 快速上手阿里云并搭建WordPress博客
  8. java数组查找指定元素_Java在数组中查找指定元素的方法
  9. 12 月活动一览|Hey,今年您 “DevFest” 了吗?
  10. 位置服务器的使用方法,Excel Server Tutorial