入口之webpackJsonpCallback

本文探讨了webpack在处理chunk时的入口函数webpackJsonpCallback的工作原理,它主要负责确保chunk依赖的正确执行顺序,保存模块定义,并在合适的时机执行模块代码。详细解释了为什么在chunk加载时需要进行判断并手动执行,以保证代码逻辑的正确运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

每个chunk的入口函数,基本上做了三件事,比如针对app.js

webpackJsonpCallback([0,1], {
  2: function(){}, 
  3:function(){}
}, [2]);

 1.chunk1有可能依赖chunk0,要先执行chunk0,也有可能chunk0已经执行过了,所以需要判断

 2.将module = 2/3 的定义保存在modules对象中

 3.执行module = 2的模块的代码,注入三个参数

 

对于第一点说明:

在通过require.ensure加载的时候,的确有可能0正在加载中,并且chunk0下边挂在了很多callback,需要在chunk0 resolve的时候去执行,此后才能执行chunk1的代码逻辑,所以添加判断,并且手动执行时必要的

我也没见过场景。。。

 

/******/ 	var parentJsonpFunction = window["webpackJsonp"];
/******/ 	window["webpackJsonp"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) {
/******/ 		// add "moreModules" to the modules object,
/******/ 		// then flag all "chunkIds" as loaded and fire callback
/******/ 		var moduleId, chunkId, i = 0, resolves = [], result;
/******/ 		for(;i < chunkIds.length; i++) {
/******/ 			chunkId = chunkIds[i];
/******/ 			if(installedChunks[chunkId])
/******/ // 此处installedChunkds[chunkId] = [resolve, reject, promise],
         // 在__webpack_require__.e函数定义的
/******/ 				resolves.push(installedChunks[chunkId][0]);
/******/ 			installedChunks[chunkId] = 0;
/******/ 		}
/******/ 		for(moduleId in moreModules) {
/******/ 			if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
/******/ 				modules[moduleId] = moreModules[moduleId];
/******/ 			}
/******/ 		}
/******/ 		if(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules);
/******/ 		while(resolves.length)
/******/ 			resolves.shift()();
/******/ 		if(executeModules) {
/******/ 			for(i=0; i < executeModules.length; i++) {
/******/ 				result = __webpack_require__(__webpack_require__.s = executeModules[i]);
/******/ 			}
/******/ 		}
/******/ 		return result;
/******/ 	};

 

ds

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值