browserify bundle文件头函数 深度剖析

2018-03-23  本文已影响0人  成松song

(function() {
function e(t, n, r) {
function s(o, u) { //实际上s()是一个加载模块的函数
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: {}
};
console.log("---call---");
t[o][0].call(l.exports, // t[o][0]是编号为o的模块的主体函数; l.exports是一个空对象{},在这里作为主体函数的调用者
function(module) { // 这个函数传递给主体函数的require参数,当调用require()的时候,就会调用这个函数
var n = t[o][1][module]; // 获得模块的编号
return s(n ? n: module) // 调用s函数,加载模块。这里的 (n ? n: modle)是为了可以用数字作为require的参数,比如require(2)
},
l, l.exports, e, t, n, r) // l 作为主体函数的的module参数;l.exports 作为主体函数的exports参数;t是所有的模块的数组,比如t[13]就表示引用第13个模块
}
return n[o].exports // 返回导出的接口
}
var i = typeof require === "function" && require;
for (var o = 0; o < r.length; o++) s(r[o]);
return s
}
return e
})()({
1 : [function(require, module, exports) {

        arguments;

        console.log("--1--")
        var unique = require("uniq");    //这个地方也可以写数字2
        console.log("--2--")
        var data = [1, 2, 2, 3, 4, 5, 5, 5, 6];
        //
        console.log(unique(data));

    },
        {
            "uniq": 2
        }],
    2 : [function(require, module, exports) {

        arguments;
        console.log("--3--")
        "use strict"

        function unique_pred(list, compare) {
            console.log("--4--")
            var ptr = 1,
                len = list.length,
                a = list[0],
                b = list[0]
            for (var i = 1; i < len; ++i) {
                b = a
                a = list[i]
                if (compare(a, b)) {
                    if (i === ptr) {
                        ptr++
                        continue
                    }
                    list[ptr++] = a
                }
            }
            list.length = ptr
            return list
        }

        function unique_eq(list) {
            console.log("--5--")
            var ptr = 1,
                len = list.length,
                a = list[0],
                b = list[0]
            for (var i = 1; i < len; ++i, b = a) {
                b = a
                a = list[i]
                if (a !== b) {
                    if (i === ptr) {
                        ptr++
                        continue
                    }
                    list[ptr++] = a
                }
            }
            list.length = ptr
            return list
        }

        function unique(list, compare, sorted) {
            console.log("--6--")
            if (list.length === 0) {
                return list
            }
            if (compare) {
                if (!sorted) {
                    list.sort(compare)
                }
                return unique_pred(list, compare)
            }
            if (!sorted) {
                list.sort()
            }
            return unique_eq(list)
        }

        console.log("--7--")

        module.exports = unique

    },
        {}]
},
{},
[1]);
上一篇下一篇

猜你喜欢

热点阅读