Soy un novato RequireJS. Cuando uso "require.config" e incluyo una ruta a jQuery con un nombre diferente a jQuery, los resultados no son los esperados.En RequireJS: no se puede alias el nombre de jQuery en la ruta
Aquí hay un ejemplo muy simple para ayudar a explicar mi problema.
Estructura de los archivos
root
├── Index.htm
└── scripts
├── libs
│ ├── jquery-1.7.1.js
│ └── require.js
├── main.js
└── someModule.js
index.htm
<html>
<head>
<title>BackboneJS Modular app with RequireJS</title>
<script data-main="scripts/main" src="scripts/libs/require.js"></script>
</head>
<body>
<h3>BackboneJS is awesome</h3>
</body>
</html>
Aquí las referencias etiqueta script requieren en los scripts/libs. Cuando se ejecuta require, se debe ejecutar el archivo JavaScript llamado main.js en el directorio de scripts.
main.js
require.config({
"paths": {
"mod1": "someModule"
}
});
require(["mod1"], function (sm) {
console.log(sm.someValue);
});
En mi experiencia, el "mod1" puede ser cualquier cosa, siempre y cuando se hace referencia a la misma en el camino require.config y en el método requiere.
someModule.js
define([], function() {
console.log();
return { someValue: "abcd" };
});
simplemente para la corrección que incluía someModule.js
La inconstancia percibida se produce cuando incluyo jQuery.
En el siguiente main.js agregué jQuery a la configuración y al método require.
main.js
require.config({
"paths": {
"jquery": "libs/jquery-1.7.1"
,"mod1": "someModule"
}
});
require(["mod1", "jquery"], function (sm, $) {
console.log(sm.someValue);
console.log($);
});
Con el adicional de jQuery todo parece todavía funciona. El "console.log ($)" escribe la función jQuery.
Ahora el pateador. En el siguiente código cambio "jQuery" a "jqueryA", tanto en los caminos y requieren
require.config({
"paths": {
"jqueryA": "libs/jquery-1.7.1"
,"mod1": "someModule"
}
});
require(["mod1", "jqueryA"], function (sm, $) {
console.log(sm.someValue);
console.log($);
});
Ahora "console.log ($)", escribe nula.
¿Se debe esperar esto? ¿Hay alguna razón por la cual el nombre debe ser jquery, pero para mod1 puede ser cualquier cosa?
Puedo solucionar este problema sin problemas, pero este problema parece extraño. Sé que puedo usar el archivo combinado RequireJS y jQuery, pero cuando jQuery tiene una actualización no quiero depender de RequireJS para incluir el nuevo jQuery.
gracias por la explicación! con este conocimiento resolví mi propio problema jquery/requirejs. – bunnyhero