Cómo cargar Bootstrap.js y otras librerías sin errores en RequireJS

Uncaught Error: No define call for bootstrap

¿Recibes este error al cargar Bootstrap.js en RequireJS?

Cuando cargamos un módulo un RequireJS, a la función callback le tenemos que añadir la variable en la que se volcará ese módulo.

El problema es que Bootstrap.js no devuelve ningún objeto y se produce el error de arriba. También ocurre con otras librerías que no devuelvan nada.

Ejemplo del error

Cargamos 3 módulos con sus 3 variables, que reproducen el error.

define([ 'backbone', 'models/user', 'bootstrap' ], function(Backbone, User, Bootstrap) { 
  ... 
});

Corrección

Eliminamos la variable correspondiente, en este ejemplo la 3ª llamada “Bootstrap” de la función

define([ 'backbone', 'models/user', 'bootstrap' ], function(Backbone, User) { // Aqui omitimos: ", Bootstrap" 
  ... 
});

Observación

Esta corrección aplicada al mundo real donde tendríamos una lista mayor de módulos+variables, una manera es mover el módulo o módulos a corregir al final del listado, sin olvidar comprobar que la relación y orden de módulos y variables es correcta.

Es decir, si tenemos esto:

define([ 'backbone', 'bootstrap', 'models/user', ... ], function(Backbone, Bootstrap, User, ...) { 
  ... 
});

Si se elimina sin más:

define([ 'backbone', 'bootstrap', 'models/user', ... ], function(Backbone, User, ...) { 
  ... 
});

Tendríamos que el 2º módulo Boostrap enlazaría con la 2ª variable User.

Por eso, mencionaba que el módulo Bootstrap le debemos mover al final:

define([ 'backbone', 'models/user', ... 'bootstrap' // Aqui ], function(Backbone, User, ...) { 
  ... 
});

También puedes utilizar Shim de RequireJS.