webpack基本概念、打包流程和热更新原理

webpack基本概念

1. webpack中的module,chunk 和 bundle

module 就是一个js模块,就是被require或export的模块,例如 ES模块,commonjs模块,AMD模块
chunk 是 代码块,是进行依赖分析的时候,代码分割出来的代码块,包括一个或多个module,是被分组了的module集合,code spliting之后的就是chunk
bundle 是 文件,最终打包出来的文件,通常一个bundle对应一个chunk

2. webpack中loader和plugin在作用

loader是文件转换器,将webpack不能处理的模块转换为webpack能处理的模块,就是js模块
plugin是功能扩展,干预webpack的打包过程,修改编译结果或打包结果

webpack打包流程

1. 生成options (将webpack.config.js和shell中的参数,合并中options对象)
2. 实例化complier对象 (webpack全局的配置对象,包含entry,output,loader,plugins等所有配置信息)
3. 实例化Compilation对象 (compiler.run方法执行,开始编译过程,生成Compilation对象)
4. 分析入口js文件,调用AST引擎(acorn)处理入口文件,生成抽象语法树AST,根据AST构建模块的所有依赖
5. 通过loader处理入口文件的所有依赖,转换为js模块,生成AST,继续遍历,构建依赖的依赖,递归,直至所有依赖分析完毕
6. 对生成的所有module进行处理,调用plugins,合并,拆分,生成chunk
7. 将chunk生成为对应bundle文件,输出到目录

webpack热更新的原理

基本原理,webpack监听文件变化,服务端和客户端有websocket通信,服务端想客户端发送文件变化消息,
客户端根据文件变化消息获取变更模块代码,进行模块代码的热替换

1. webpack-dev-server通过express启动服务端
2. 客户端通过sockjs和服务端建立websocket长连接
3. webpack监听文件变化,文件保存触发webpack重新编译,编译后的代码保存在内存中,不在output.path中产生输出
4. 编译会生成hash值,hot-update.json(已改动模块的json),hot-update.js(已改动模块的js)
5. 通过socket想客户端发送hash值
6. 客户端对比hash值,一致在走缓存,不一致则
通过ajax获取hot-update.json,json包含模块hash值
再通过jsonp请求获取hot-update.js
7. 热更新js模块,若失败,则live reload刷新浏览器代替热更新(若模块未配置热更新,则同样live reload)

原文地址:https://www.cnblogs.com/mengff/p/12590406.html

时间: 2024-09-29 22:47:50

webpack基本概念、打包流程和热更新原理的相关文章

ionic2新手入门整理,搭建环境,创建demo,打包apk,热更新,优化启动慢等避坑详解

onic官方文档链接:http://ionicframework.com/docs/ 如果是新的环境会有很多坑,主要是有墙,请仔细阅读每个步骤 文档包含以下内容: l  环境搭建 l  创建demo并调试运行 l  打包APK l  添加支持热更新 l  优化启动慢问题 l  常用命令 1.      环境搭建 需要安装以下软件和插件(Android): l  安装nodeJS(自带npm) l  配置cnpm  (使用淘宝镜像取代npm) l  安装cordova和ionic2 l  安装JA

Webpack热更新原理

开发环境页面热更新早已是主流,常见的需求如赛事网页推送比赛结果.网页实时展示投票或点赞数据.在线评论或弹幕.在线聊天室等,都需要借助热更新功能,才能达到实时的端对端的极致体验. webpack-hot-middleware webpack-hot-middleware中间件是webpack的一个plugin,通常结合webpack-dev-middleware一起使用.借助它可以实现浏览器的无刷新更新(热更新),即webpack里的HMR(Hot Module Replacement).如何配置

ios WaxPatch热更新原理

以下是引用他人文章内容: 为什么需要 WaxPatch 很多情况下,已经在 AppStore 上线的应用需要紧急缺陷修复,此时便需要使用某些技术手段,使应用程序能够动态下载补丁,进行缺陷修复. 什么是 WaxPatch 迄今为止,脚本语言中运行速度最快的是 Lua.Lua 语言由巴西里约热内卢天主教大学的 Roberto Ierusalimschy.Waldemar Celes 和 Luiz Henrique de Figueiredo 于 1993 年开发的.其最初的设计目的是提供一个方便嵌入

python基于函数替换的热更新原理介绍

热更新即在不重启进程或者不离开Python interpreter的情况下使得被编辑之后的python源码能够直接生效并按照预期被执行新代码.平常开发中,热更能极大提高程序开发和调试的效率,在修复线上bug中更是扮演重要的角色.但是要想实现一个理想可靠的热更模块又非常的困难. 1.基于reload reload作为python官方提供的module更新方式,有一定作用,但是很大程度上并不能满足热更的需求. 先来看一下下面的问题: >>> import sys, math >>

使用IntelliJ IDEA过程中webpack无法热更新

最近发现一个问题,就是在使用IntelliJ 的过程中发现webpack的热更新失效,也在网上找过很多的修改webpack.config.js配置文件的方法,但是都没有生效,看着同事们一个一个在愉(tong)快(ku)的撸代码,我怎么能忍!? 后来,经过不断的尝试,更换IDE,发现其实就是IDE的问题.如果你是按照官网上的方式进行安装的webpack,但是还是无法进行热更新,那么下图就是你的福音啦. Setting ---> Appearance & Behavior ---> Sys

Android 热更新是如何实现的?

Android开发中,我们常常遇到热更新这个概念,而这个热更新具体是怎么实现的呢?今天在网上看到一个大神分享的热更新相关实现原理和实现代码,感觉灰常不错,分享给广大码农盆友look look . ClassLoader Android的基础语言是Java,而Java在运行时加载对应的类是通过ClassLoader来实现的,ClassLoader本身是一个抽象来,Android中使用PathClassLoader类作为Android的默认的类加载器. PathClassLoader又是什么?Pat

Cordova 代码热更新 - 简书

原文:Cordova 代码热更新 - 简书 Cordova 代码热更新 [图片上传失败...(image-a19be7-1521624289049)] 基于 Cordova 框架能将网页应用 (js, html, css, 图片等) 打包成 App.当 App 在应用商店上架后,如何快速更新是我们需要考虑的问题.?? 本地打包新版本 App 发布到应用商店,但这中发布流程耗费时间,尤其是 Apple Store 应用加载网络资源,这样 App 展示的内容就可以保证是最新的,但当应用断网时,应用就

cocos2dx 3.1.1 在线热更新 自动更新(使用AssetsManager更新游戏资源包)

为什么要在线更新资源和脚本文件? 简单概括,如果你的游戏项目已经在google play 或Apple Store 等平台上架了,那么当你项目需要做一些活动或者修改前端的一些代码等那么你需要重新提交一个新版本给平台.但是平台审核和具体的上架时间是个不确定的.具体什么时候能上架,主要由具体的平台决定. 如果游戏项目是使用脚本语言进行编写的(如lua.js),那么一旦需要更新,则可以通过从服务器下载最新的脚本和资源,从而跳过平台直接实现在线更新.(有些平台是禁止在线更新资源方式的,但是你懂得) 闲话

Node.Js的热更新服务——supervisor

因为目前项目每次修改文件要看效果,必须重启服务:node app.js再进入浏览器看效果,很是麻烦.所幸的是有很多第三方的管理工具(supervisor,hotnode,forever,pm2等),当文件修改保存后,能自动重启node服务,但需要刷新浏览器,帮助我们节省开发时间. $ npm install -g supervisor 启动服务: supervisor node.js 命令窗口显示信息如下: [暂时贴不了,需要重新登录] 其实webpack也是可以实现实时热更新服务,暂时没去配置