Я - Требник JS Noob. Когда я использую «require.config» и включаю путь к jQuery с именем, отличным от jQuery, результаты не такие, как ожидалось.
Вот очень простой пример, чтобы объяснить мою проблему.
Структура файлов
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>
Здесь ссылки на теги script требуются в scripts / libs. При запуске require должен быть выполнен файл JavaScript с именем main.js в каталоге scripts.
main.js
require.config({
"paths": {
"mod1": "someModule"
}
});
require(["mod1"], function (sm) {
console.log(sm.someValue);
});
По моему опыту, "mod1" может быть любым, если на него ссылаются одинаково в пути require.config и в методе require.
someModule.js
define([], function () {
console.log();
return { someValue: "abcd" };
});
Просто для полноты я включил someModule.js
Воспринимаемое непостоянство возникает, когда я включаю JQuery.
В следующем файле main.js я добавил jQuery в конфигурацию и метод 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($);
});
С добавлением jQuery все, кажется, все еще работает. «Console.log ($)» записывает функцию jQuery.
Теперь кикер. В следующем коде я изменяю «jquery» на «jqueryA» в обоих путях и требую
require.config({
"paths": {
"jqueryA": "libs/jquery-1.7.1"
,"mod1": "someModule"
}
});
require(["mod1", "jqueryA"], function (sm, $) {
console.log(sm.someValue);
console.log($);
});
Теперь "console.log ($)" записывает ноль.
Стоит ли ожидать этого? Есть ли причина, по которой имя должно быть jquery, но для mod1 это может быть что угодно?
Я могу обойти это без проблем, но эта проблема кажется странной. Я знаю, что могу использовать объединенный файл RequireJS и jQuery, но когда в jQuery есть обновление, я не хочу зависеть от RequireJS для включения нового jQuery.