const Modules = (function () {
const modules = {};
function define(id, deps, impl) {
for (let i = 0, len = deps.length; i < len; i++) {
deps[i] = modules[deps[i]];
}
modules[id] = impl.apply(null, deps);
return Modules;
}
function require(name) {
return modules[name];
}
return {
define,
require,
};
}());
Modules.define('foo', [], function () {
console.log('foo');
function introduce(who) {
console.log(`Let me introduce: ${who}`);
}
return {
introduce,
};
});
Modules.define('bar', ['foo'], function (foo) {
console.log('bar');
foo.introduce('Ember');
function greet(who) {
console.log(`Let me greet: ${who}`);
}
return {
greet,
};
});
Modules.define('baz', ['foo', 'bar'], function (foo, bar) {
console.log('baz');
foo.introduce('Invoker');
bar.greet('Storm');
});
Modules.require('foo').introduce('james');