Dependency Management Got Awesome CommonJS and AMD Compliant dependency loader for modern web apps



define(id, factory)
define(dependencies, factory)
define(id, dependencies, factory)

The define method is the main AMD entry point when using the Asynchronous Module Definition format.

With or Without an id

The id parameter is used to indicate the id of a module which maps back to a dependency. For every module you “require”, there must be a matching “id” in a define statement. When no id is provided, the id is inferred from the module’s path. For example, a define that requests the dependency foo/bar and downoads the file /foo/bar.js containing

define(dependencies, factory)

will receive an implicit module ID of “foo/bar” based on the module id (not the URL path). Many optimizers will auto-insert the module ID during a compilation process, however it is not required for a module to be defined and work.


The dependencies parameter is an optional array of module dependencies that are required for the currently executing define function to resolve properly. Dependencies will be downloaded and ran before factory is looked at. Any modules passed into the array will be resolved to URLs based on the resolution rules for modules.

The Factory (aka the Exports)

The one required parameter in a define call, factory, is either an object or a function. When factory is an object, the object is assigned straight to the results of the module: its exports. When factory is a function, the function is ran. The signature of the function maps 1:1 with each array item from the dependencies array. If no dependencies array was used, the function will receive in order require, module, and exports.

Any value returned from the function will be assigned to the module’s exports.


// file: foo/bar.js
define('foo/bar', ['foo/baz'], function (baz) {
  // this is the foo/bar module
  // the local "baz" variable is the result of the foo/baz module
  // whatever we return is available to other modules who
  // depend on foo/bar
  return {
  	hello: 'I am the foo/bar module',
  	baz: 'This is baz hello: ' + baz.hello
comments powered by Disqus