É comum ver define(['underscore', 'backbone', ...
no início de cada definição de módulo quando as pessoas estão usando o Backbone com RequireJS. Embora tecnicamente correto, é desnecessário e pode facilmente levar a bugs (onde os arquivos necessários são esquecidos ou os argumentos estão ausentes / na ordem errada).
Como as versões não-AMD oficiais do jQuery, Underscore * e Backbone se registram globalmente, não é necessário exigi-las mais de uma vez. Usando a shim
opção de configuração do RequireJS, podemos configurá-los facilmente de forma que só tenhamos que declará-los uma vez:
require.config({
paths: {
jquery: '../vendor/jquery/jquery', // jQuery
lodash: '../vendor/lodash/dist/lodash', // Underscore stand-in (non AMD version)
backbone: '../vendor/backbone/backbone', // Backbone (non AMD version)
},
shim: {
// Libraries
jquery: {
exports: '$'
},
lodash: {
exports: '_',
},
backbone: {
exports: 'Backbone',
deps: ['jquery', 'lodash']
}
/*
* Our app requires Backbone
* (which in turn requires LoDash and jQuery)
*/
app: {
deps: ['backbone']
}
}
});
/*
* Now require the app code, which, because of the `shim`
* settings, will only load once jQuery, LoDash, and Backbone
* are added to the global scope
*/
require(['app']);
Você não precisará mais definir jQuery, Underscore ou Backbone em cada módulo, pois o aplicativo não será carregado até que estejam prontos.
Notas
- Eu geralmente uso LoDash no lugar de sublinhado