browserify打包后的运行规则策略

时间:2022-05-27 22:19:34

直接看打包后的代码

(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; o < r.length; o++) s(r[o]); // 从按序加载区域一个一个加载模块。
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])
; // 按序加载区域,从哪里开始加载,按照数组中的顺序加载过去。