RequireJS - Módulos AMD

Um módulo em RequireJS é um objeto com escopo e não está disponível no namespace global. Portanto, o namespace global não será poluído. A sintaxe RequireJS permite carregar módulos mais rápido sem se preocupar em manter o controle da ordem das dependências. Você pode carregar várias versões do mesmo módulo na mesma página.

Definindo Módulos

Módulo é definido usando o define()função; a mesma função é usada para carregar o módulo também.

Pares Simples de Nome / Valor

Se o módulo for apenas uma coleção de pares de nome e valor, você pode usar a seguinte sintaxe -

define({
   state: "karnataka",
   city: "bangalore"
});

Definindo Funções

Um módulo também pode usar uma função para frameworks, sem ter dependências. Isso pode ser feito usando a seguinte sintaxe -

define(function () {
   
   //Do setup work here
   return {
      state: "karnataka",
      city: "bangalore"
   }
});

Definindo funções com dependências

Se o módulo tiver dependências, a colocação do primeiro argumento (array de nomes de dependências), o segundo argumento (função de definição) e o objeto de retorno que define o módulo são mostrados na seguinte sintaxe -

define(["./mnc", "./startup"], 
   function(mnc, startup) {
        
      return {
         state: "karnataka",
         city: "bangalore",
      
         addCompany: function() {
            mnc.decrement(this);
            startup.add(this);
         }
      
      }
   }
);

Definindo um Módulo como uma Função

Não é obrigatório para um módulo retornar apenas objetos, qualquer valor válido de uma função também pode ser retornado. A seguinte sintaxe é usada para definir um módulo como uma função -

define(["./mnc", "./startup"],
   function(mnc, startup) {
       
      return function(title) {
         return title ? (window.title = title) :
         startup.storeName + ' ' + mnc.name;
      }
      
   }
);

Definindo um Módulo com um Nome

Em alguns casos, você pode ter que incluir um nome para o módulo como o primeiro argumento para define(). Isso pode ser feito usando a seguinte sintaxe -

define("js2/title",
   ["js1/mnc", "js1/startup"],
   
   function(mnc, startup) {
      //Define js2/title object in here.
   }
   
);

Carregando Módulo