Мы создали платформу, похожую на shopify, в которой размещаем клиентские веб-страницы для электронной коммерции.Require.JS + JQuery Plugins + Клиент, размещенный в конфликте JQuery
На каждой странице у нас есть javascript платформы, который загружается через requireJS.
Эта платформа javascript использует jquery Cookie в качестве плагина.
Если клиент также устанавливает jQuery, это может привести к тому, что плагин Cookie будет установлен непосредственно на экземпляр jQuery клиентов, а не на наш экземпляр jQuery.
HTML клиент:
<script type="text/javascript" src="/jquery.js"></script>
app.js [наш код]:
require.config({
"paths": {
"jquery": "bower_components/jquery/jquery.min",
"jquery-cookie": "bower_components/jquery-cookie/jquery.cookie",
},
"shim": {
"jquery-cookie": ["jquery"]
}
});
platform.js [наш код]:
define(['jquery', 'jquerye-cookie'], function(jQuery, jQueryCookie) {
console.dir(jQuery.cookie); // <-- Not available, sometimes
});
Вы можете увидеть на консоли .dir иногда jQuery.cookie не будет доступен, потому что jQuery cookie устанавливает себя в глобальный $, который может быть версией клиента j Запрос или наш.
Единственное исправление, которое у меня действительно есть, - это скомпилированная версия нашей платформы js в любое время. В производстве это прекрасно, так как наш код скомпилирован вместе и включает в себя нашу зависимость jQuery нашего кода, порядок выполнения детерминирован и при загрузке jQuery cookie устанавливается в правильный объект jQuery.
Проблема заключается в разработке, это PITA, чтобы работать только на скомпилированной версии нашей платформы js. Просто время компиляции немного замедляет нас.
Я обсуждаю попытку удалить всю зависимость jQuery в нашей платформе JS. Я не хочу этого делать, так как потеряю петрушку. Есть ли лучшее решение, чтобы избежать этой проблемы?
Update:
режим noconflict не будет работать, так как JQuery куки (и других плагинов JQuery) работа:
(function ($, document, undefined) {
$.cookie = function (key, value, options) {
});
})(jQuery, document);
Так как вы можете видеть, даже если я повторно пространство имен нашего JQuery что-то вроде «платформы $», плагин по-прежнему будет загружаться в window.jQuery, который будет либо неопределенным, либо версией jQuery клиента.
Edit:
Чтобы быть ясно, что это не "а" клиент, то многие (в конечном счете, тысячи, надеюсь).
Использует ли клиент RequireJS вообще? – Louis
Возможно - но, вообще говоря, нет. – amirpc