现在的模块化机制

89 阅读1分钟

大多数模块依赖加载器/管理器本质上都是将这种模块定义封装进一个友好的API。 代码的核心是: modules[name] = impl.apply(impl, deps) 为了模块的定义引用了包装函数(可以传入任何依赖项),并且将返回值,也就是模块的API,存储进一个根据模块名称来管理的模块列表中。

var MyModules = (function () {
        var modules = {}
        function define(name, deps, impl) {
            for (let i = 0, len = deps.length; i < len; i++) {
                deps[i] = modules[deps[i]]
            }
            modules[name] = impl.apply(impl, deps)
        }
        function get(name) {
            return modules[name]
        }
        return {
            define,
            get
        }
    })()
    MyModules.define("bar", [], function () {
        function hello(who) {
            return "Let me introduce:" + who
        }
        return {
            hello
        }
    })
    MyModules.define("foo", ["bar"], function (bar) {
        var hungry = "hippo"

        function awesome() {
            console.log(bar.hello(hungry).toUpperCase());
        }
        return {
            awesome
        }
    })
    var bar = MyModules.get("bar")
    var foo = MyModules.get("foo")
    console.log(bar.hello("hzm"));
    foo.awesome()