CommonJS AMDとDeferred

Writing Modular JavaScript With AMD, CommonJS & ES HarmonyのModules With Deferred Dependenciesが便利なので活用してる。
初期化処理が非同期処理でrequireしてきても即使えるとは限らない場合に使う。
モジュール側ではモジュールそのものではなくてpromiseを返しておいて、モジュールの実体が完成したらresolveで渡す。
使う側はrequireしてきたpromiseのthenメソッドのcallbackでモジュールの実体を受け取って使う。

// 何らかの非同期処理を経て初期化されるモジュール
define('someModule',['jquery'],function($){
  var dfd = $.Deferred();
  setTimeout(function(){
    // モジュールとして実際使いたいobject
    var module = {a:1};
    dfd.resolve(module);
  },500);
  return dfd.promise();
});
// モジュールを使う側
require(['someModule'],function(someModule){
  someModule.then(function(module){
    console.log(module); // {a:1}
  });
});

こういったモジュール複数に依存している場合は

require(['someModule1','someModule2','someModule3'],function(someModule1,someModule2,someModule3){
  $.when(someModule1,someModule2,someModule3).then(function(module1,module2,module3){
    console.log(module1,module2,module3);
  });
});

ね、簡単でしょう?