You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
(function(modules){// webpackBootstrap// The module cachevarinstalledModules={};// The require functionfunction__webpack_require__(moduleId){// Check if module is in cacheif(installedModules[moduleId]){returninstalledModules[moduleId].exports;}// Create a new module (and put it into the cache)varmodule=installedModules[moduleId]={i: moduleId,l: false,exports: {}};// Execute the module functionmodules[moduleId].call(module.exports,module,module.exports,__webpack_require__);// Flag the module as loadedmodule.l=true;// Return the exports of the modulereturnmodule.exports;}return__webpack_require__(__webpack_require__.s="./src/index.js");})({"./src/a.js":
(function(module,exports){eval("module.exports = 'chenying'\n\n//# sourceURL=webpack:///./src/a.js?");}),"./src/index.js":
(function(module,exports,__webpack_require__){eval("const name = __webpack_require__(/*! ./a */ \"./src/a.js\")\r\nconsole.log(name)\n\n//# sourceURL=webpack:///./src/index.js?");})});
webpack打包出的文件解析
基础配置
我们先来准备一下基础的打包配置,然后研究下打包出来的文件结构和组成
入口文件
index.js
引入了a.js
文件的导出然后我们通过命令
npx webpack
进行webpack打包,会在dist
目录下产出一个bundle.js
文件,接下来我们主要来解析这个文件打包出来的文件解析
我们先把
bundle.js
中的注释和一些暂时不会涉及的代码给去掉,得到如下代码我们可以发现
bundle.js
其实是一个自执行函数,其中传入的参数是一个键值对的对象,键为"./src/index.js"
等打包之前涉及的文件名称,值是一个函数然后我们看下这个自执行函数里面干了什么
首先我们发现函数里面自己实现了一个
__webpack_require__
方法,然后通过对象installedModules
实现缓存,而__webpack_require__
方法里面通过modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
将一个函数执行,最后将module.l = true;
表示这个文件已经加载完毕,最后返回module.exports;
我们最后总体梳理一下:
在自执行函数里面,自己先调用了一次
__webpack_require__
方法,参数是我们的webpack
配置的入口文件路径"./src/index.js"
,然后__webpack_require__
会将这个路径缓存到installedModules
中然后通过
call
调用./src/index.js
这个键对应的处理函数调用处理函数的时候发现函数中含有
__webpack_require__(/*! ./a */ \"./src/a.js\")
,走同样的逻辑,将./src/a.js
缓存到installedModules
中,然后执行这个函数,返回module.exports
,也就是返回了'chenying'总结
我们可以大致总结一下
webpack
打包出来的文件将入口文件以及入口文件开始涉及到的其他文件转化为对应的键值对,然后作为自执行函数的参数传入
自执行函数内部构造了一个
__webpack_require__
函数,通过这个函数依次的让对应的值(对应的函数)执行,最后返回mudole.exports
就这样递归将全部文件串在了一起
The text was updated successfully, but these errors were encountered: