Я пытаюсь включить jQuery Mobile в проект, который использует RequireJS для AMD, однако я не хочу загружать jQuery Mobile в качестве модуля AMD. Идея заключается в том, что мы будем использовать AMD для конкретной прикладной логики, но любые внешние зависимости библиотек, такие как jQuery, будут приведены в глобальную область, просто вручную определяя теги скриптов.Отделив jQuery Mobile (1.1.0) от AMD (RequireJS)
Проблема, с которой я столкнулась, заключается в определении тега сценария для jQuery mobile до того, как тег ScriptJS требует, чтобы RequireJS определял анонимный модуль и создавал конфликт, который я не понимаю. Я посмотрел на код jQuery и jQuery Mobile, и они настроены на условный вызов метода define()
, если он существует. Поскольку я включаю те теги перед загрузкой RequireJS, они не должны звонить define()
. Я дважды проверял это с помощью контрольных точек, и они действительно этого не делают.
Когда я включаю JQuery Mobile, я получаю следующее сообщение об ошибке:
Error: Mismatched anonymous define() module: [object Object]
Я не понимаю, как это происходит, если JQuery Mobile не называет define()
. Что я здесь делаю неправильно? Это что-то с новой условной поддержкой AMD jQuery Mobile?
Итак, у меня на самом деле были установлены мои сценарии, как ваш первый пример в моем проекте, и все еще получал ошибку. Я просто обнаружил, что проблема, похоже, приходит, когда также включены как jQuery Mobile 1.1.0, так и отдельная библиотека ([js-signals] (http://millermedeiros.github.com/js-signals/)), которая также условно поддерживает AMD. Я проверил, и ни одна из библиотек не вызывает определение, и все же я все еще получаю ошибку несоответствия. Я поставил быструю POC вместе [здесь] (https://github.com/jrolfs/RequireJS-External-Library-Test). Я буду продолжать изучать это, но я совершенно новый для AMD. Спасибо за вашу помощь. – tomswift
Какой браузер вы тестируете? Я пробовал в Chrome и Safari и видел ошибку, но если бы я попытался в Firefox, все было в порядке. Когда я перемещал теги сценария в голову, а не внутри тела, ошибка удалялась в браузерах веб-китов. Поэтому я думаю, что это какая-то странная проблема с браузерами webkit и содержимым тела. Поэтому либо поместите скрипты в голову, либо просто загрузите все библиотеки с помощью requirejs (рекомендуется). – jrburke
Это странно. Извините, я тестировал в Safari и должен был протестировать в некоторых других браузерах. Я понимаю, что рекомендуется загружать все библиотеки с требованием, но, похоже, имеет смысл иметь больше библиотек, основанных на полезности, таких как jQuery и Underscore в глобальной области, поэтому зависимости в модулях AMD - это просто модули приложений, а не libs, но я могу быть недоразумением. Еще одна второстепенная причина, по которой я настраивал этот способ, заключается в том, что многие библиотеки, похоже, догоняют AMD прямо сейчас, и это позволяет избежать жонглирования одной версией AMD. – tomswift