应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

webpack十连问你能接住几题

  前言面试题只是一个引子,快速刷题就是背(面试官问你,但是他不一定很深入),想深入理解还是得花大量精力;webpack的构建流程是什么初始化参数:解析webpack配置参数,合并shell传入和webpack。config。js文件配置的参数,形成最后的配置结果;开始编译:上一步得到的参数初始化compiler对象,注册所有配置的插件,插件监听webpack构建生命周期的事件节点,做出相应的反应,执行对象的run方法开始执行编译;确定入口:从配置的entry入口,开始解析文件构建AST语法树,找出依赖,递归下去;编译模块:递归中根据文件类型和loader配置,调用所有配置的loader对文件进行转换,再找出该模块依赖的模块,再递归本步骤直到所有入口依赖的文件都经过了本步骤的处理;完成模块编译并输出:递归完事后,得到每个文件结果,包含每个模块以及他们之间的依赖关系,根据entry或分包配置生成代码块chunk;输出完成:输出所有的chunk到文件系统;webpack的热更新原理
  其实是自己开启了express应用,添加了对webpack编译的监听,添加了和浏览器的websocket长连接,当文件变化触发webpack进行编译并完成后,会通过sokcet消息告诉浏览器准备刷新。而为了减少刷新的代价,就是不用刷新网页,而是刷新某个模块,webpackdevserver可以支持热更新,通过生成文件的hash值来比对需要更新的模块,浏览器再进行热替换
  服务端启动webpackdevserver服务器创建webpack实例创建server服务器添加webpack的done事件回调编译完成向客户端发送消息创建express应用app设置文件系统为内存文件系统添加webpackdevmiddleware中间件中间件负责返回生成的文件启动webpack编译创建http服务器并启动服务使用sockjs在浏览器端和服务端之间建立一个websocket长连接创建socket服务器
  客户端webpackdevserverclient端会监听到此hash消息客户端收到ok消息后会执行reloadApp方法进行更新在reloadApp中会进行判断,是否支持热更新,如果支持的话发生webpackHotUpdate事件,如果不支持就直接刷新浏览器在webpackhotdevserver。js会监听webpackHotUpdate事件在check方法里会调用module。hot。check方法HotModuleReplacement。runtime请求Manifest通过调用JsonpMainTemplate。runtime的hotDownloadManifest方法调用JsonpMainTemplate。runtime的hotDownloadUpdateChunk方法通过JSONP请求获取最新的模块代码补丁js取回来或会调用JsonpMainTemplate。runtime。js的webpackHotUpdate方法然后会调用HotModuleReplacement。runtime。js的hotAddUpdateChunk方法动态更新模块代码然后调用hotApply方法进行热更webpack打包是hash码是如何生成的
  1。webpack生态中存在多种计算hash的方式hashchunkhashcontenthash
  hash代表每次webpack编译中生成的hash值,所有使用这种方式的文件hash都相同。每次构建都会使webpack计算新的hash。chunkhash基于入口文件及其关联的chunk形成,某个文件的改动只会影响与它有关联的chunk的hash值,不会影响其他文件contenthash根据文件内容创建。当文件内容发生变化时,contenthash发生变化
  2。避免相同随机值webpack在计算hash后分割chunk。产生相同随机值可能是因为这些文件属于同一个chunk,可以将某个文件提到独立的chunk(如放入entry)webpack离线缓存静态资源如何实现在配置webpack时,我们可以使用htmlwebpackplugin来注入到和html一段脚本来实现将第三方或者共用资源进行静态化存储在html中注入一段标识,例如lt;HtmlWebpackPlugin。options。loading。html,在htmlwebpackplugin中即可通过配置html属性,将script注入进去利用webpackmanifestplugin并通过配置webpackmanifestplugin,生成manifestjson文件,用来对比js资源的差异,做到是否替换,当然,也要写缓存script在我们做Cl以及CD的时候,也可以通过编辑文件流来实现静态化脚本的注入,来降低服务器的压力,提高性能可以通过自定义plugin或者htmlwebpackplugin等周期函数,动态注入前端静态化存储scriptwebpack常见的plugin有哪些ProvidePlugin:自动加载模块,代替require和importhtmlwebpackplugin可以根据模板自动生成html代码,并自动引用css和js文件extracttextwebpackplugin将js文件中引用的样式单独抽离成css文件DefinePlugin编译时配置全局变量,这对开发模式和发布模式的构建允许不同的行为非常有用。HotModuleReplacementPlugin热更新optimizecssassetswebpackplugin不同组件中重复的css可以快速去重webpackbundleanalyzer一个webpack的bundle文件分析工具,将bundle文件以可交互缩放的treemap的形式展示。compressionwebpackplugin生产环境可采用gzip压缩JS和CSShappypack:通过多进程模型,来加速代码构建cleanwenpackplugin清理每次打包下没有使用的文件speedmeasurewebpackplugin:可以看至U每个Loader和Plugin执行耗时(整个扌丁包耗时、每个Plugin和Loader耗时)webpackbundleanalyzer:可视化Webpack输出文件的体积(业务组件、依赖第三方模块webpack插件如何实现webpack本质是一个事件流机制,核心模块:tabable(SyncAsync)Hooks构造出Compiler(编译)Compiletion(创建bundles)compiler对象代表了完整的webpack环境配置。这个对象在启动webpack时被一次性建立,并配置好所有可操作的设置,包括options、loader和plugin。当在webpack环境中应用一插件时,插件将收到此compiler对象的引用。可以使用它来访问webpack的主环境compilation对象代表了一次资源版本构建。当运行webpack开发环境中间件时,每当检测到一个文件变化,就会创建一个新的compilation,从而生成一个新的编译资源。一个compilation对象表现了当前的模块资源、编译生成资源、变化的文件、以及被跟踪依赖的状态的信息。compilation对象也提供了很多关键时机的回调,以供插件做自定义处理时选择使用创建一个插件函数,在其prototype上定义apply方法,指定一个webpack自身的事件钩子函数内部处理webpack内部实例的特定数据处理完成后,调用webpack提供的回调函数functionMyWebpackPlugin()(};prototype上定义apply方法MyWebpackPlugin。prototype。applyfunction(){指定一个事件函数挂载到webpackcompiler。pluginCwebpacksEventHookfuncion(compiler)(console。log(这是一个插件);功能完成调用后webpack提供的回调函数callback()})webpack有哪些常的Loaderfileloader:把件输出到个件夹中,在代码中通过相对URL去引输出的件urlloader:和fileloader类似,但是能在件很的情况下以base64的式把件内容注到代码中去sourcemaploader:加载额外的SourceMap件,以便断点调试imageloader:加载并且压缩图件babelloader:把ES6转换成ES5cssloader:加载CSS,持模块化、压缩、件导等特性styleloader:把CSS代码注到JavaScript中,通过DOM操作去加载CSS。eslintloader:通过ESLint检查JavaScript代码webpack如何实现持久化缓存服务端设置http缓存头(cachecontrol)打包依赖和运行时到不同的chunk,即作为splitChunk,因为他们几乎是不变的延迟加载:使用import()方式,可以动态加载的文件分到独立的chunk,以得到自己的chunkhash保持hash值的稳定:编译过程和文件内通的更改尽量不影响其他文件hash的计算,对于低版本webpack生成的增量数字id不稳定问题,可用hashedModuleIdsPlugin基于文件路径生成解决如何webpack来优化前端性能?
  webpack优化前端性能是指优化webpack的输出结果,让打包的最终结果在浏览器运快速效。压缩代码:删除多余的代码、注释、简化代码的写法等等式。可以利webpack的UglifyJsPlugin和ParallelUglifyPlugin来压缩JS件,利cssnano(cssloader?minimize)来压缩css利CDN加速:在构建过程中,将引的静态资源路径修改为CDN上对应的路径。可以利webpack对于output参数和各loader的publicPath参数来修改资源路径TreeShaking:将代码中永远不会到的段删除掉。可以通过在启动webpack时追加参数optimizeminimize来实现CodeSplitting:将代码按路由维度或者组件分块(chunk),这样做到按需加载,同时可以充分利浏览器缓存提取公共第三库:SplitChunksPlugin插件来进公共模块抽取,利浏览器缓存可以期缓存这些需频繁变动的公共代码webpacktreeShaking机制的原理treeShaking也叫摇树优化,是一种通过移除多于代码,来优化打包体积的,生产环境默认开启。可以在代码不运行的状态下,分析出不需要的代码;利用es6模块的规范ES6Module引入进行静态分析,故而编译的时候正确判断到底加载了那些模块静态分析程序流,判断那些模块和变量未被使用或者引用,进而删除对应代码
  转自:https:juejin。cnpost7002839760792190989

北京环球度假区居全国热门景区首位今年清明假日期间,北京消费季主题活动精彩纷呈,糕点、茶叶、鲜花等应季商品走俏市场,漫步北京微度假引领风尚。监测数据显示,北京环球度假区位居全国热门景区首位,持续发挥流量带动效应……等不到欧文就交易4换3!湖人打造全新14人名单,首发五虎不逊NBA休赛期继续进行,不过有一个消息还是值得大家关注下,那就是新赛季常规赛赛程公布时间推迟。多名资深记者对此事进行了报道,根据史密斯的透露,新赛季赛程公布的时间之所以推迟了一周……火箭评估艾顿交易价值,他和史密斯是绝配,恐4年1。37亿先签火箭夏联首战77比91输给魔术史密斯10中4得到10分7篮板3助攻。火箭将在7月10日对阵雷霆,12日对阵马刺,15日对阵开拓者,火箭将通过这几场夏联比赛对史密斯进行考察。……千金难买我喜欢兴价比背后的感性与理性千金难买我喜欢。在如今的消费市场,为兴趣爱好付费愈发普遍,尤其在90后、00后这些年轻消费群体中表现更为突出。这代人很难被定义,我国经济腾飞、移动互联飞速发展深刻影响着他们的消……黄瓜苦瓜都靠边,三伏天就该吃这菜,营养极高,凉拌消暑又开胃导语:黄瓜、苦瓜都靠边,三伏天就该吃这菜,营养极高,凉拌消暑又开胃!进入7月后,随着天气的持续升温,小暑节气也悄悄地来临!俗语说:小暑一过,一日热三分。虽然小暑时节并不是……鸡蛋鸭蛋鹅蛋,哪种营养价值最高?了解清楚再吃,也不迟鸡蛋是生活中常见的蛋类食品,含营养丰富,与鸭蛋和鹅蛋相比,价格也是最便宜的。其实鸡蛋、鸭蛋和鹅蛋都是家禽蛋,但是生活中人们经常把这三种蛋拿来作比较,想要知道究竟哪一种蛋更……春天,多给孩子吃这8种高钙菜,好吃好做,孩子爱吃长得高春天是万物生长的季节,也是儿童长个的最佳时期,据表明显示,春季35月是儿童身高增高最快的时段,春季想要孩子长得快,要多吃高钙食物,营养充足易吸收,再加上多运动、早睡早起,孩子个……独家对话四川冬奥技术官员看到苏翊鸣登上领奖台,情不自禁热泪盈四川体育职业学院冬季运动管理中心单双板滑雪队坡面障碍技巧教练李云峰封面新闻记者陈甘露陈羽啸张家口报道图由受访者提供2月20日,2022年北京冬奥会即将在依依不舍中落……敢不敢用一年时间改变自己?想必你一定有过这样的经历,感觉日子过得很糟糕,甚至开始讨厌那样堕落的自己,你已经无法忍受自己目前的状态,你一遍遍在心里说要改变,却不知道从哪里开始。没关系,接下来我们一起……五彩斑斓!南京中山植物园红枫岗美景如画扬子晚报网11月18日讯(记者徐昇)寒意渐浓,枫叶日益呈现出独特的风韵与热情,南京中山植物园迎来了观枫的最好时节。特别是在北园红枫岗一带,明黄、浅绿、粉橙、火红、绛紫枝叶层叠,……小米MIUI14全新界面功能首曝光这些机型将获适配升级在去年12月底的小米12系列新品发布会上,MIUI13系统被同台发布,官方宣传语是快,更稳。现在7个月时间过去了,大家的MIUI13用着体验如何?根据最新的爆料消息,MI……DataX源码分析十之Transformer源码分析在DataX中,还有一个比较核心的组件,就是Transformer。本章我们将着重分析Transformer。继上一篇文章:DataX源码分析九至Task初始化为啥需要T……
区块链资讯(2022年6月23号)一、快讯1、鲍威尔:对稳定币、数字金融市场进行监管的时代已经到来2、支持加密货币支付的金融科技公司Wirex恢复在英国的服务3、加密交易平台Uphold决定退……哈弗H9带你尽情去野五一小长假即将来临,相信已有不少人按捺不住躁动的心,想来一场说走就走的自驾游,逃离城市的烦闷,寻求一种释放自我的方式。都说世间美景各有不同,且各具魅力!何不趁此机会,游遍祖国大……小沈阳的落寞,是喜剧界的悲哀曾经被誉为赵本山接班人的小沈阳,已经6年没有演过任何小品了。2016年,他在东方卫视《欢乐喜剧人》节目上,表演了《不差钱2》之后,便与这个让他爆红的艺术形式渐行渐远。……新疆4名后卫确定!阿的江之子离队,郭艾伦老对手续约,场均77过去一个赛季,CBA新疆队进入一个低谷期,自从周琦拒绝续约之后,球队固有的体系发生重大变化,年轻球员没法扛起大旗,虽然摩尔特里的到来缓解了危机,不过最终还是没有进入季后赛。作为……中国女篮第一中锋被放弃!无法立足WNBA赛场回国打球成定局在本赛季的WNBA赛场,韩旭和李月汝无疑是球迷的关注球员,然而当韩旭获得了球队主帅信任的时候,李月汝却每况愈下,之前她只能够在一些垃圾时间获得出场机会,在最新的一场比赛,李月汝……被刘涛的审美折服!穿1万polo衫配皮裙,不秀身材,反而美得时尚是没有界限的,对普通人而言,选择什么样的着装,取决于自身的喜好。但是对于聪明的女性来说,想要打造偏时髦感的穿搭,就是要尝试一些新的风格。毕竟,只是习惯日常的搭配思路,穿搭就……上半年我国经济增长2。5,GDP为562642亿元,约为8。在多地疫情频发带来的投资、消费下滑,供应链受阻等多种因素影响下,2022年第二季度,我国经济增长率大幅放缓至0。4,完成的名义GDP约为292464亿元人民币,按平均汇率换算为……V观财报失踪半年后,密春雷回来了?退市海医董事长7日起正常履中新经纬7月6日电下落不明半年后,著名主持人董卿的丈夫密春雷将7日起正常履行览海医疗产业投资股份有限公司(下称退市海医)董事长职责。退市海医6日披露公告,董事、董事长密春……马卡皇马将与罗德里戈续约至2028年,违约金10亿欧元据《马卡报》报道,皇马将与罗德里戈续约到2028年。罗德里戈与皇家马德里的现有合同在2025年到期,过去一个赛季他在皇马表现出色,根据《马卡报》的消息,皇马将与罗德里戈续……确定取消!停止缴纳!7月起正式执行国家发布公告:《印花税法》征收范围不包括权利、许可证照,国家知识产权局将自2022年7月1日起终止印花税代征业务。另,税务总局连发3条公告明确:7月1日起,印花税征管和纳……新模型显示地球深处的温度变化或导致火山喷发汤加火山爆发的惊人力量震惊了世界,但对于使用卫星数据研究地球表面以下深处温度变化的地球科学家来说,这座水下火山实际爆发的事实却不那么令人惊讶。据报道,HungaTonga……房改卷土重来,任泽平新方案为其铺路?这3类人睡不着了由于人们需求的不断上涨,房子的价格也在不断的上调中,那么现在有很多的房地产,并且开发出了很多房子,现在的人们真的还缺房吗?答案是否定的。我们可以通过以下三个数据总结得出,……
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网