// primeiro vamos recuperar todas as dependências necessárias
// pela chamada requerida
for (var i = 0; i <deps.length;i++){
args[i] = define[deps[i]];
}
// corresponder todas as dependências da função de callback
return callback.apply(null, args);
}
// você pode ver esse código em ação aqui: http://jsfiddle.net/qap949pd/
```
### Uso na vida real com require.js
Em contraste com o exemplo introdutório, `require.js` (a biblioteca mais popular de AMD) na verdade implementa o **A** do **AMD**, permitindo que você carregue os módulos e suas
// o callback é deferido até que a dependencia seja carregada
var coisa = new AlgumaClasse();
});
console.log('Então aqui estamos nós, esperando!'); // isso vai rodar primeiro
```
Por convenção, você geralmente guarda um módulo em um arquivo. `require.js` pode resolver nome de módulos baseado no caminho das pastas, então você não precisa nomear os seus módulos, mas sim simplesmente referenciar eles usando sua origem. No exemplo `algumaClasse` é adotado a pasta `modules`, relativa a configuração da sua `baseUrl`:
* app/
* main.js
* modules/
* algumaClasse.js
* algunsHelpers.js
* ...
* daos/
* coisas.js
* ...
Isso significa que nós podemos definir `algumaClasse` sem especificar o id de um módulo:
Apps baseados em `require.js` geralmente terão um único ponto de acesso (`main.js`) que é passado à tag script do `require.js` como um data-attribute. Ele vai ser automaticamente carregado e executado com o carregamento da página:
Muitas pessoas preferem usar AMD para sanar a organização do código durante o desenvolvimento, mas continuam querendo colocar um único arquivo de script em produção ao invés de realizarem centenas de requisições XHRs no carregamento da página.
`require.js` vem com um script chamado `r.js` (que você vai provavelmente rodar em node.js, embora Rhino suporte também) que você pode analisar o gráfico de dependências de seu projeto, e fazer em um único arquivo contendo todos os seus módulos (corretamente nomeados), minificados e prontos para serem consumidos.
Instale-o utilizando `npm`:
```shell
$ npm install requirejs -g
```
Agora você pode alimentá-lo com um arquivo de configuração:
```shell
$ r.js -o app.build.js
```
Para o nosso exemplo acima a configuração pode ser essa:
```javascript
/* file : app.build.js */
({
name : 'main', // nome do ponto de acesso
out : 'main-built.js', // nome o arquivo para gravar a saída
baseUrl : 'app',
paths : {
// `empty:` fala para o r.js que isso ainda deve ser baixado da CDN, usando
Uma incrível e detalhada visão geral [de build options](https://github.com/jrburke/r.js/blob/master/build/example.build.js) está disponível no repositório do GitHub.
### Tópicos não abordados nesse tutorial
* [Plugins de carregamento / transforms](http://requirejs.org/docs/plugins.html)
* [CommonJS style carregamento e exportação](http://requirejs.org/docs/commonjs.html)