В подобных случаях, когда у вас есть известная иерархия зависимостей, вы можете попробовать использовать shim
функциональность requirejs.Поскольку вы знаете, что у backbone есть зависимости для jQuery и Underscore, вы соответствующим образом подбираете backbone.
В прошлом вот как я справлялся с этой ситуацией (я также включил пример кода о том, как загружать ваши зависимости черезCDN с локальным запасным вариантом, вы также можете использовать директорию bower).Я бы порекомендовал убедиться, что вы используете requirejs для объединения ваших ресурсов (экономит время и повышает производительность):
main.js
requirejs.config({
baseUrl: 'vendor',
paths: {
data: '../data',
tmpl: './tmpl',
views: '../views',
router: '../router',
jquery: ['//yourCDNhere.tld/jquery/jquery.min', './jquery/jquery-2.0.0.min'],
backbone: ['//yourCDNhere.tld/backbone/backbone.min', './backbone/backbone.min'],
etc...
},
deps: ['router'],
shim: {
'backbone': {
deps: ['jquery', 'underscore'],
exports: 'Backbone'
},
'jquery': {
exports: '$'
},
'underscore': {
exports: '_'
}
}
});
require(['jquery', 'underscore', 'backbone', 'router'], function( $, _, Backbone, Router ) {
var router = new Router();
Backbone.history.start();
});
router.js
define( function( require ) {
var Backbone = require( 'backbone' );
var DashboardView = require( 'views/dashboard' );
return Backbone.Router.extend({
// Define some basic routes
routes: {
'': 'renderDashboard'
},
// Initialize the router
initialize: function() {
_.bindAll( this );
return this;
},
renderDashboard: function(){
var dashboardView = new DashboardView();
}
});
});