网站开发静态和动态,企业解决方案是什么意思啊,电商网站建设属于研发费用吗,网站多大够用webpack打包流程#xff1f; 1. 初始化: 启动构建#xff0c;读取与合并配置参数#xff0c;加载Plugin#xff0c;实例化Compiler#xff1b; 2. 编译: 从 entry出发#xff0c;针对每个 Module 串行调用对应的 loader 去翻译文件的内容#xff0c;再找到该 Module 依赖…webpack打包流程 1. 初始化: 启动构建读取与合并配置参数加载Plugin实例化Compiler 2. 编译: 从 entry出发针对每个 Module 串行调用对应的 loader 去翻译文件的内容再找到该 Module 依赖的Module递归地进行编译处理 3. 输出:将编译后的 Module 组合成 Chunk将 Chunk 转换成文件输出到文件系统中。 loader和plugin到底是什么呢 loader即文件加载器用来预处理文件。 plugin即插件用来增强功能。 比如css-loader, 就是解析CSS文件并处理CSS中的依赖关系可以将css都提取出来如果js中包含css代码会为其创建一个css文件。
处理一个文件可以使用多个loaderloader的执行顺序和配置中的顺序是相反的最后一个loader最先执行第一个loader最后执行。
第一个执行的loader接受源文件作为参数内容其他的loader接受前一个loader的返回值作为自己的参数最后一个执行的loader会返回此模块的JavaScript源码。 loader即为文件加载器操作的是文件将文件A通过loader转换成文件B是一个单纯的文件转化过程。 plugin即为插件是一个扩展器丰富webpack本身增强功能 针对的是在loader结束之后webpack打包的整个过程它并不直接操作文件而是基于事件机制工作监听webpack打包过程中的某些节点执行广泛的任务。
webpack 在编译代码过程中会触发一系列 Tapable 钩子事件插件所做的就是找到相应的钩子往上面挂上自己的任务也就是注册事件这样当 webpack 构建的时候插件注册的事件就会随着钩子的触发而执行了。 webpack热更新如何实现的HMR Hot Module Replacement可以理解为模块热替换指在应用程序运行的过程中替换、添加、删除模块而无需重新刷新整个应用。 具体过程如下
1. webpack在watch模式下利用webpack-dev-server 和 webpack 之间的接⼝交互监听文件变化如果更改内容就会将变化的内容重新编译存在内存里
2. 通过 sockjswebpack-dev-server 的依赖在浏览器端和服务端之间建⽴⼀个 websocket ⻓连接将 webpack 编译打包的各个阶段的状态信息告知浏览器端同时也包括 Server 监听静态⽂件变化的信息。浏览器端根据这些 socket 消息进⾏不同的操作。服务端传递的最主要信息还是新模块的 hash 值后⾯的步骤根据这⼀ hash 值来进⾏模块热替换
3. HMR的 runtime 拿到了更新后的hash只会向server端发送请求获取更新列表然后再发送一次请求获取所有更新内容的代码
4. 将新旧模块进行对比决定是否更新如果确定更新就会检查模块之间的依赖关系更新依赖引用
5. 当HMR失败后会触发live reload刷新页面获取最新的chunk。 通过webpack-dev-server创建两个服务器提供静态资源的服务express和Socket服务express server 负责直接提供静态资源的服务打包后的资源直接被浏览器请求和解析socket server 是一个 websocket 的长连接双方可以通信当 socket server 监听到对应的模块发生变化时会生成两个文件.jsonmanifest文件和.js文件update chunk通过长连接socket server 可以直接将这两个文件主动发送给客户端浏览器浏览器拿到两个新的文件后通过HMR runtime机制加载这两个文件并且针对修改的模块进行更新