加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

浅谈 Webpack 背后的运行机制

发布时间:2019-08-15 21:36:41 所属栏目:优化 来源:Alan
导读:副标题#e# 在平时开发中我们经常会用到 Webpack这个时下最流行的前端打包工具。它打包开发代码,输出能在各种浏览器运行的代码,提升了开发至发布过程的效率。 我们知道一份 Webpack配置文件主要包含入口( entry)、输出文件( output)、模式、加载器( Loader

这段代码开始执行,把异步加载相关的 chunk id 与模块传给 push 函数。而前面已经提到过, window["webpackJsonp"] 数组的 push 函数已被重写为 webpackJsonpCallback 函数,它的定义位置在 webpackBootstrap 中:

  1. function webpackJsonpCallback(data) { 
  2. var chunkIds = data[0]; 
  3. var moreModules = data[1]; 
  4. // then flag all "chunkIds" as loaded and fire callback 
  5. var moduleId, chunkId, i = 0, resolves = []; 
  6. // 将 chunk 标记为已加载 
  7. for(;i < chunkIds.length; i++) { 
  8. chunkId = chunkIds[i]; 
  9. if(installedChunks[chunkId]) { 
  10. resolves.push(installedChunks[chunkId][0]); 
  11. installedChunks[chunkId] = 0; 
  12. // 把 "moreModules" 加到 webpackBootstrap 中的 modules 闭包变量中。 
  13. for(moduleId in moreModules) { 
  14. if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { 
  15. modules[moduleId] = moreModules[moduleId]; 
  16. // parentJsonpFunction 是 window["webpackJsonp"] 的原生 push 
  17. // 将 data 加入全局数组,缓存 chunk 内容 
  18. if(parentJsonpFunction) parentJsonpFunction(data); 
  19. // 执行 resolve 后,加载 chunk 的 promise 状态变为 resolved,then 内的函数开始执行。 
  20. while(resolves.length) { 
  21. resolves.shift()(); 
  22. }; 

走进这个函数中,意味着异步加载的 chunk 内容已经拿到,这个时候我们要完成两件事,一是让依赖这次异步加载结果的模块继续执行,二是缓存加载结果。

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读