Eu li o documento requirejs aqui API
requirejs.config({
shim: {
'backbone': {
//These script dependencies should be loaded before loading
//backbone.js
deps: ['underscore', 'jquery'],
//Once loaded, use the global 'Backbone' as the
//module value.
exports: 'Backbone'
},
'underscore': {
exports: '_'
},
'foo': {
deps: ['bar'],
exports: 'Foo',
init: function (bar) {
//Using a function allows you to call noConflict for
//libraries that support it, and do other cleanup.
//However, plugins for those libraries may still want
//a global. "this" for the function will be the global
//object. The dependencies will be passed in as
//function arguments. If this function returns a value,
//then that value is used as the module export value
//instead of the object found via the 'exports' string.
return this.Foo.noConflict();
}
}
}
});
mas eu não estou recebendo parte do shim . por que devo usar shim e como devo configurar, posso obter mais esclarecimentos?
por favor, qualquer um pode explicar com um exemplo por que e quando devemos usar o calço. obrigado.
Underscore
eBackbone
aqui usam como o normal, o queshim
fazer neste caso? Posso usarrequire( function() { _.extend({}); })
? Ele entende_
?De acordo com a documentação da API RequireJS, o shim permite que você
- Configurando dependências
Digamos que você tenha 2 módulos javascript (móduloA e móduloB) e um deles (móduloA) depende do outro (móduloB). Ambos são necessários para seu próprio módulo, então você especifica as dependências em require () ou define ()
Mas como o requer-se segue a AMD, você não tem ideia de qual seria buscado antes. É aqui que o shim vem para resgatar.
Isso garantiria que o módulo B sempre fosse buscado antes que o módulo A fosse carregado.
- Configurando exportações
A exportação de shim informa ao RequireJS qual membro no objeto global (a janela, supondo que você esteja em um navegador, é claro) é o valor real do módulo. Vamos dizer que o móduloA se adiciona ao
window
como 'modA' (assim como jQuery e sublinhado fazem como $ e _ respectivamente), então tornamos nosso valor de exportação 'modA'.Isso dará ao RequireJS uma referência local para este módulo. O modA global ainda existirá na página também.
- Inicialização personalizada para scripts "globais de navegador" mais antigos
Este é provavelmente o recurso mais importante da configuração do shim, que nos permite adicionar scripts 'globais do navegador' e 'não-AMD' (que também não seguem o padrão modular) como dependências em nosso próprio módulo.
Vamos dizer que o moduleB é um javascript antigo com apenas duas funções funcA () e funcB ().
Embora ambas as funções estejam disponíveis no escopo da janela, o RequireJS nos recomenda usá-las por meio de seu identificador / identificador global para evitar confusões. Portanto, configurar o calço como
O valor de retorno da função init é usado como o valor de exportação do módulo em vez do objeto encontrado por meio da string 'exportações'. Isso nos permitirá usar funcB em nosso próprio módulo como
Espero que tenha ajudado.
fonte
Você deve adicionar caminhos em requirejs.config para declarar, por exemplo:
fonte