美文网首页
Amd 模块加载器简单实现

Amd 模块加载器简单实现

作者: evoxy | 来源:发表于2018-05-03 16:36 被阅读0次
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')

from emberjs

相关文章

  • Amd 模块加载器简单实现

    from emberjs

  • 模块化编程--require使用

    AMD--require AMD规范:异步模块加载机制 服务器端 -- 同步加载 浏览器端 -- 异步加载 ...

  • 模块化初窥

    模块化 AMD 实现AMD的库有RequireJS 、curl 、DojoAMD采用require()语句加载模块...

  • export,import

    ES6之前模块加载方案,CommonJS (用于服务器)和 AMD(浏览器)2.CommonJS 和 AMD模块只...

  • Webpack笔记

    webpack 笔记 Webpack 是一个模块加载器,它同时支持AMD、CMD加载规范。与其他模块化加载器相比,...

  • 22Module语法

    概述 CommonJS 是服务器模块加载规范,AMD 是浏览器模块加载规范 前者,nodejs中require和m...

  • AMD CMD

    AMD CMD AMD,CMD是浏览器端模块加载器的两种规范。AMD的代表是requireJS和SeaJS。今天主...

  • AMD,CMD,commonJS,ES6

    AMD 异步模块定义 RequireJS 是一个JavaScript模块加载器,会在相关的js加载后执行回调函数,...

  • 简述AMD 和 CMD

    AMD AMD推崇依赖前置,在定义模块的时候就要声明其依赖的模块同样都是异步加载模块,AMD在加载模块完成后就会执...

  • js模块化之amd

    今天我们聊聊amd的实现 前言 amd(异步模块定义)使用于浏览器端的。 语法 定义 引入 不使用amd模拟实现 ...

网友评论

      本文标题:Amd 模块加载器简单实现

      本文链接:https://www.haomeiwen.com/subject/twhlrftx.html