var registry = {}
var seen = {}
function missingModule(name, referrerName) {
if (referrerName) {
throw new Error(
'Could not find module ' + name + ' required by: ' + referrerName
)
} else {
throw new Error('Could not find module ' + name)
}
}
function internalRequire(_name, referrerName) {
var name = _name
var mod = registry[name]
if (!mod) {
name = name + '/index'
mod = registry[name]
}
var exports = seen[name]
if (exports !== undefined) {
return exports
}
exports = seen[name] = {}
if (!mod) {
missingModule(_name, referrerName)
}
var deps = mod.deps
var callback = mod.callback
var reified = new Array(deps.length)
for (var i = 0; i < deps.length; i++) {
if (deps[i] === 'require') {
reified[i] = requireModule
} else {
reified[i] = internalRequire(deps[i], name).exports
}
}
reified.unshift(exports)
callback.apply(this, reified)
return exports
}
define = function(name, deps, callback) {
var value = {}
if (arguments.length === 2) {
if (typeof deps === 'function') {
callback = deps
deps = []
}
}
value.deps = deps
value.callback = callback
registry[name] = value
}
requireModule = function(name) {
return internalRequire(name, null)
}
define('a', function(module) {
module.exports = 1
})
define('b', function(module) {
module.exports = 2
})
define('container', ['a', 'b'], function(module, a, b) {
console.log(a + b)
})
internalRequire('container')
Amd 模块加载器简单实现
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...