webpack 编译结果

2021-02-15  本文已影响0人  bestCindy

a.js

console.log("module a");
module.exports = "a";

index.js

console.log("index module");
var a = require("./a");
console.log(a);

my-main.js

// 模拟 webpack 的编译结果

// 合并两个模块
// ./src/a.js
// ./src/index.js

// 这是一个立即执行函数,将需要执行的模块以参数的形式传递进来
(function (modules) {
    // 用于缓存模块导出的结果
    var moduleExports = {};

    // __webpack_require__ 避免 require 和 node 环境下的 require 重名
    function __webpack_require__(moduleId) {
        if (moduleExports[moduleId]) {
            // 检查是否有缓存
            return moduleExports[moduleId];
        }

        //得到该模块对应的函数
        var func = modules[moduleId];
        var module = {
            exports: {}
        }
        // 运行模块
        func(module, module.exports, __webpack_require__);
        // 得到模块导出的结果
        var result = module.exports;

        // 缓存模块
        moduleExports[moduleId] = result;
        
        // 把导出结果返回
        return result
    }

    // 执行入口模块
    // require 函数相当于运行一个模块,得到模块的导出结果
    return __webpack_require__("./src/index.js");
})({
    "./src/a.js": function (module, exports) {
        // 用 eval 是因为当代码出错的时候可以快速定位文件出错的位置
        eval("console.log(\"module a\")\nmodule.exports = \"a\";\n //# sourceURL=webpack:///./src/a.js")
    },
    "./src/index.js": function (module, exports, __webpack_require__) {
        eval("console.log(\"index module\")\nvar a = __webpack_require__(\"./src/a.js\")\nconsole.log(a)\n //# sourceURL=webpack:///./src/index.js")
    }
})
上一篇下一篇

猜你喜欢

热点阅读