合并两个模块
假如有两个文件
./src/a.js./src/index.jsindex.js里面依赖a.js
const module = {"./a.js":function (module,exports,require) {// 假如这个a.js里的代码console.log("a.js");module.export "a.js";},"./index.js": function (module,exports,reqire){// 假如这个是index.js的代码const obj = require("./a.js");console.log("index.js");console.log(obj);}}
为了不污染全局变量,使用立即执行函数
(function (Module) { // 把合并的代码通过参数传入var __webpack_module_cache__ = {}; // 缓存对象,防止多次导入已经导入的模块function __webpack_require(moduleId){ //提供require函数,moduleId就是合并模块的属性名, //每一个保持唯一if(__webpack_module_cache[moduleId]){ // 有缓存直接返回缓存的结果return __webpack_module_cache[moduleId];}var func = Module[moduleId]; //得到一个模块的函数var module = { // 创建module对象exports:{}}func(module,module.exports,require);var result = module.exports; //得到导出的结果__webpack_module_cache__[moduleId] = result; // 缓存结果return result; // 返回就是导出结果,使用通过module.exports导出的}return __webpack_require("./src.index");})({"./a.js":function (module,exports,require) {// 假如这个a.js里的代码// webpack是通过eval("console.log(\"a.js\");\nmodule.export \"a.js\""),这是为了更好的 // 调试代码,可以通过注释的方式,字在游览器执行报错的情况下,告诉游览器是哪个文件哪一行 // 报错console.log("a.js");module.export "a.js";},"./index.js": function (module,exports,reqire){// 假如这个是index.js的代码const obj = require("./a.js");console.log("index.js");console.log(obj);}})
