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.