# webpack 原理
伪代码
(function (modules) {
// 缓存已加载的模块
var installedModules = {};
// 加载依赖
function require(moduleId) {
// 如果当前模块已经加载过,则直接返回 (也避免了模块之间相互引用,重复加载的情况)
if (installedModules[moduleId]) {
return installedModules[mudoleId].exports;
}
var exports = {};
// 根据模块的key调用执行模块代码
modules[moduleId].call(exports);
return exports;
}
// 入口
return require("./index.js");
})({
"./index.js": function () {}, // 入口文件
"./src/minus.js": function (exports) {
exports.minus = void 0;
var minus = function () {};
exports.minus = minus;
}, // 依赖的模块
"./src/add.js": function (exports) {
exports["default"] = add;
function add() {
//
}
}, // 依赖的模块
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 打包优化
详细请点击webpack 配置解析 (opens new window)
webpack 打包默认会将所有模块打到一个 chunk 中,如果代码中有动态导入模块:
import("./asyncModule").then((res) => {
console.log(res);
});
1
2
3
2
3
则动态导入的代码块会被单独打到一个 chunks 中