合并两个模块

假如有两个文件 ./src/a.js ./src/index.js index.js里面依赖a.js

  1. const module = {
  2. "./a.js":function (module,exports,require) {
  3. // 假如这个a.js里的代码
  4. console.log("a.js");
  5. module.export "a.js";
  6. },
  7. "./index.js": function (module,exports,reqire){
  8. // 假如这个是index.js的代码
  9. const obj = require("./a.js");
  10. console.log("index.js");
  11. console.log(obj);
  12. }
  13. }

为了不污染全局变量,使用立即执行函数

  1. (function (Module) { // 把合并的代码通过参数传入
  2. var __webpack_module_cache__ = {}; // 缓存对象,防止多次导入已经导入的模块
  3. function __webpack_require(moduleId){ //提供require函数,moduleId就是合并模块的属性名, //每一个保持唯一
  4. if(__webpack_module_cache[moduleId]){ // 有缓存直接返回缓存的结果
  5. return __webpack_module_cache[moduleId];
  6. }
  7. var func = Module[moduleId]; //得到一个模块的函数
  8. var module = { // 创建module对象
  9. exports:{}
  10. }
  11. func(module,module.exports,require);
  12. var result = module.exports; //得到导出的结果
  13. __webpack_module_cache__[moduleId] = result; // 缓存结果
  14. return result; // 返回就是导出结果,使用通过module.exports导出的
  15. }
  16. return __webpack_require("./src.index");
  17. })(
  18. {
  19. "./a.js":function (module,exports,require) {
  20. // 假如这个a.js里的代码
  21. // webpack是通过eval("console.log(\"a.js\");\nmodule.export \"a.js\""),这是为了更好的 // 调试代码,可以通过注释的方式,字在游览器执行报错的情况下,告诉游览器是哪个文件哪一行 // 报错
  22. console.log("a.js");
  23. module.export "a.js";
  24. },
  25. "./index.js": function (module,exports,reqire){
  26. // 假如这个是index.js的代码
  27. const obj = require("./a.js");
  28. console.log("index.js");
  29. console.log(obj);
  30. }
  31. }
  32. )