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 模块加载器简单实现
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。