/* webpack/runtime/get javascript chunk filename *///指向打包后的异步chunk的文件名,用于之后请求异步文件路径拼接(()=>{// This function allow to reference async chunks__webpack_require__.u=(chunkId)=>{// return url for filenames based on template// chunkId:src_a_jsreturn""+ chunkId +".bundle.js";};})();
(()=>{// define __esModule on exports// 标识是esm导入__webpack_require__.r=(exports)=>{if(typeof Symbol !=="undefined"&& Symbol.toStringTag){Object.defineProperty(exports, Symbol.toStringTag,{value:"Module",});}Object.defineProperty(exports,"__esModule",{value:true});};})();
导入文件通用方法
webpack_require
// The require functionfunction__webpack_require__(moduleId){// Check if module is in cache// 首先从缓存中,根据moduleId获取("./src/index.js"、./src/index.js)var cachedModule = __webpack_module_cache__[moduleId];if(cachedModule !==undefined){return cachedModule.exports;}// Create a new module (and put it into the cache)// 缓存中没有则创建,exports对象会在调用moduleId对应的方法内部进行赋值var module =(__webpack_module_cache__[moduleId]={// no module.id needed// no module.loaded neededexports:{},});// Execute the module function// 调用moduleId对应的方法引入文件内容__webpack_modules__[moduleId](module, module.exports, __webpack_require__);// Return the exports of the modulereturn module.exports;}
异步文件引入
获取下载文件的公共地址__webpack_require__.p
通过获取已有script标签的src属性,来获取下载地址
/* webpack/runtime/publicPath */// 获取入口文件js脚本的公共路径,本例为' http://127.0.0.1:5500/dist/'(()=>{var scriptUrl;// importScripts用于在一个js里面包含其他的js文件。相当于C里面的#include。if(__webpack_require__.g.importScripts){scriptUrl = __webpack_require__.g.location +"";}var document = __webpack_require__.g.document;// 本案例会进入该分支if(!scriptUrl && document){if(document.currentScript) scriptUrl = document.currentScript.src;//'http://127.0.0.1:5500/dist/bundle.js'if(!scriptUrl){var scripts = document.getElementsByTagName("script");if(scripts.length){scriptUrl = scripts[scripts.length -1].src;}}}// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration// or pass an empty string ("") and set the __webpack_public_path__ variable from your code to use your own logic.if(!scriptUrl)thrownewError("Automatic publicPath is not supported in this browser");scriptUrl = scriptUrl.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/");//替换后结果为: http://127.0.0.1:5500/dist/__webpack_require__.p = scriptUrl;})();
/* webpack/runtime/ensure chunk */(()=>{//保存具体导入方法的对象,本案例保存__webpack_require__.f.j方法__webpack_require__.f ={};// This file contains only the entry chunk.// The chunk loading function for additional chunks// chunkId:src_a_js__webpack_require__.e=(chunkId)=>{let res = Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key)=>{//这里实际上调用了:__webpack_require__.f.j(chunkId, promises)// promises是一个数组,用来保存每个下载的chunk的下载状态,具体chunk状态查看__webpack_require__.f.j__webpack_require__.f[key](chunkId, promises);return promises;},[]));return res;};})();
/* webpack/runtime/jsonp chunk loading */// 异步文件的引入,__webpack_require__.e实际调用的是__webpack_require__.f.j,__webpack_require__.f.j实际调用的是__webpack_require__.l(()=>{// no baseURI// object to store loaded and loading chunks// undefined = chunk not loaded, null = chunk preloaded/prefetched// [resolve, reject, Promise] = chunk loading, 0 = chunk loadedvar installedChunks ={main:0,};__webpack_require__.f.j=(chunkId, promises)=>{// ...};// no prefetching// no preloaded// no HMR// no HMR manifest// no on chunks loaded// install a JSONP callback for chunk loadingvarwebpackJsonpCallback=(parentChunkLoadingFunction, data)=>{var[chunkIds, moreModules, runtime]= data;// add "moreModules" to the modules object,// then flag all "chunkIds" as loaded and fire callbackvar moduleId,chunkId,i =0;if(chunkIds.some((id)=> installedChunks[id]!==0)){for(moduleId in moreModules){if(__webpack_require__.o(moreModules, moduleId)){__webpack_require__.m[moduleId]= moreModules[moduleId];}}if(runtime)var result =runtime(__webpack_require__);}// if (parentChunkLoadingFunction) parentChunkLoadingFunction(data);// 处理异步chunk加载成功for(; i < chunkIds.length; i++){chunkId = chunkIds[i];if(__webpack_require__.o(installedChunks, chunkId)&&installedChunks[chunkId]){installedChunks[chunkId][0]();}installedChunks[chunkId]=0;}};// 本案例中:self是window,self["webpackChunkwebpack5_demo"]存储的是异步chunck及其内容,本案例对应src_a_js.bundle.js内容var chunkLoadingGlobal =(self["webpackChunkwebpack5_demo"]=self["webpackChunkwebpack5_demo"]||[]);console.log("ww123", chunkLoadingGlobal);//执行chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null,0));chunkLoadingGlobal.push =webpackJsonpCallback.bind(null,chunkLoadingGlobal.push.bind(chunkLoadingGlobal));console.log("www3123", chunkLoadingGlobal);})();