code: function _getDep(id, config, context) {
      var base, conf, nrmId, def, pluginName, sourceConf, fullUrl, baseFullUrl, loader
      if (!id) {
        return {}
      }
      pluginName = _getPluginName(id)
      if (pluginName) {
        return {plugin: _getPlugin(pluginName), load: {pluginName: pluginName, id: id, nrmId: id, config: config}}
      }
      def = _defined[id]
      if (def) { // reserved
        loader = def.getLoader()
        if (loader) {
          return {inst: def, load: {loader: loader, id: id, nrmId: id, config: config}}
        } else {
          return {inst: def}
        }
      }
      sourceConf = config.source[_getSourceName(id)]
      conf = _extendConfig(config, sourceConf)
      base = context.base
      nrmId = _normalizeId(id, base, conf)
      if (_isRelativePath(id)) {
        conf = base && base.config || conf
      }
      def = _getDefined(id, nrmId, conf)
      fullUrl = _getFullUrl(nrmId, conf.baseUrl)
      if (base) {
        baseFullUrl = _getFullUrl(base.nrmId, base.baseUrl)
        context.deps && _setDepReverseMap(fullUrl, baseFullUrl)
        if (!def && !_getDefined(base.id, base.nrmId, base.config || conf) && _hasCircularDep(baseFullUrl, fullUrl)) { // cirular dependency
          return {}
        }
      }
      if (def) {
        return {inst: def}
      } else {
        return {load: {id: id, nrmId: nrmId, config: conf}}
      }
    }
docs: require