`

入口之webpackJsonpCallback

 
阅读更多

每个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

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics