直接看打包后的代码
(function e(t, n, r) {
function s(o, u) {
if (!n[o]) {
if (!t[o]) {
var a = typeof require == "function" && require
if (!u && a) return a(o, !0)
if (i) return i(o, !0)
var f = new Error("Cannot find module '" + o + "'")
throw f.code = "MODULE_NOT_FOUND", f
}
var l = n[o] = { exports: {} }
t[o][0].call(l.exports, function(e) {
var n = t[o][1][e]
return s(n ? n : e)
}, l, l.exports, e, t, n, r)
}
// 这两个if的作用说明了加载规则,先是从缓存区域中找模块,如果没有就从未加载去找模块,如果两个地方都没有找到,那么就判断是否存在自行构造的require,假如存在,尝试用自行构造的require加载模块,如果加载还是失败,那么就判断外部环境中的require是否存在,如果还是没有,那么会报找不到模块错误。在这个过程中,找到模块就会加载模块并将模块缓存到缓存区,供其他模块调用,当然里面有递归调用,运行到 t[o][0].call,说明有模块在未加载区域,然后将function当作require传入,进行递归调用。
return n[o].exports
}
var i = typeof require == "function" && require
for (var o = 0
return s // 最后返回s函数,用于最外层函数自运行。
})
({
1: [function(require, module, exports) {
var $ = require("jquery")
module.exports = function() {
console.log($)
}
}, { "jquery": 3 }],
2: [function(require, module, exports) {
a = require("./a.js")
}, { "./a.js": 1 }],
3: [function(require, module, exports) {
(function(global, factory) {
if (typeof module === "object" && typeof module.exports === "object") {
module.exports = global.document ?
factory(global, true) :
function(w) {
if (!w.document) {
throw new Error("jQuery requires a window with a document")
}
return factory(w)
}
} else {
factory(global)
}
// Pass this if window is not defined yet
}(typeof window !== "undefined" ? window : this, function(window, noGlobal) {
// ................................省略jquery大部分代码....................//
// 并不会进入以下代码,define没有定义。上面传入的是require , module, export, commonJS风格。
if (typeof define === "function" && define.amd) {
define("jquery", [], function() {
return jQuery
})
}
var
_jQuery = window.jQuery,
_$ = window.$
if (!noGlobal) {
window.jQuery = window.$ = jQuery
}
return jQuery
}))
}, {}
]}, // 未加载区域, 存放未运行的模块
{}, // 缓存区域,缓存已加载的模块
[2])