       udefine.inject(injectRoot, injectName, ignoreName)(result)
         
     result
+  
+  # Main entry point
+  udefine = (name, deps, factory) -> udefinable name, deps, factory
   
   # Allow auto injection of modules in a browser environment
   udefine.autoInject = true

  
    configFunc.apply context, [root, udefine]
  
  # Export udefine function on CommonJS environments
  if hasModule then module.exports = udefine else root.udefine = udefine
    else
      udefine.modules[type][name]
  
  udefinable = (name, deps, factory, exportable) ->
    throw new Error 'A udefine module needs to have a name' unless name?
    
    unless name is name.toLowerCase()
