Я использую Coffeescript и RequireJS. У меня есть следующая конфигурация RequireJS:
require.config
urlArgs: "v=0.0.7"
baseUrl: "./src"
catchError: true
paths:
"jquery": "lib/jQuery/jquery.min"
"jqueryui": "lib/jQuery/jquery-ui.min"
"TouchPunch": "lib/Touch-Punch/jquery.ui.touch-punch.min"
"MobileEvents": "lib/jQuery/jquery.mobile-events.min"
"MathJax": (if window.getParameter("mathJaxEnabled") == "false" then "frontend/blank" else "http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=MML_HTMLorMML")
shim:
"jqueryui": ["jquery"]
"TouchPunch": ["jquery"]
"MobileEvents": ["jquery"]
"MathJax":
exports: "MathJax",
init: ->
MathJax.Hub.Config
config: ["MMLorHTML.js"]
jax: ["input/MathML", "output/HTML-CSS"]
extensions: ["mml2jax.js","MathMenu.js","MathZoom.js"]
showMathMenu: false
showMathMenuMSIE: false
MathJax.Hub.Startup.onload()
return MathJax
Моя структура каталогов также довольно проста. Там находится папка src, в которой содержится папка lib и папка с именем frontend. Внутри библиотеки lib находится папка jQuery (содержащая jquery.min.js, jquery-ui.min.js и jquery.mobile-events.min.js), а также папку Touch-Punch (содержащую jquery.ui.touch-punch.min.js). Внутренний интерфейс - это файл с именем blank.js.
Все ранее работало с этой конфигурацией. Однако теперь, когда я загружаю страницу, я получаю ошибку сценария, и RequireJS жалуется, что не может найти Touch-Punch. Аналогично, Chrome 404:
GET file:///C:/repository/lib/Touch-Punch/jquery.ui.touch-punch.min.js?v=0.0.7
Кажется, что RequireJS и Chrome ищут Touch-Punch в корне репозитория, а не внутри папки src. Это довольно странно, потому что путь Touch-Punch довольно похож на все другие пути, и это не ошибка. Изменение пути к src/lib/Touch-Punch/jquery.ui.touch-punch.min
позволяет ему работать нормально.
Я также обнаружил, что Internet Explorer по-прежнему рассматривает эту проблему по-другому: она жалуется, что не может найти пользовательский интерфейс jQuery в указанном вами местоположении. Еще раз, изменение пути к src/lib/jQuery/jquery-ui.min
устраняет проблему... но только в Internet Explorer. Если я изменю этот путь, Chrome перестанет находить пользовательский интерфейс jQuery.
Что не так с моими путями, чтобы вызвать это? jQuery не загружается, хотя его путь практически идентичен пользовательскому интерфейсу jQuery.
Единственное, о чем я могу думать, это то, что оба jQuery UI и Touch-Punch имеют -
в своих именах файлов, но я не понимаю, почему это может вызвать проблему (и это никогда не вызывало проблемы раньше).Действительно, Internet Explorer также не может найти MobileEvents (и он также имеет Изменение имен файлов, чтобы их нет -
в имени файла), но Chrome не имеет проблемы с MobileEvents.-
в них ничего не сказалось - проблема все еще существует.
Проблема заключалась в том, что другой модуль RequireJS вмешивался в это. Поскольку они загружаются асинхронно, разница между Chrome и Internet Explorer заключается в том, что модули загружаются в другом порядке. Часть внешнего модуля RequireJS загрузится, а затем внутренний, который изменил конфигурацию RequireJS, а затем остальную часть внешнего модуля (не удалось) загрузить.
Я исправил его, используя миндаль, чтобы обернуть внутренний модуль.
Простое решение:
Нажмите jquery-ui в отпечатки пальца
shim: {
"jquery-ui": {
exports: "$",
deps: ["jquery"],
async: false
},
"jquery-ui-touch-punch": {
exports: "$",
deps: ["jquery", "jquery-ui"],
async: false
}
}
jquery-ui-touch-punch
зависит от jquery-ui
, вероятно, верно, но это не та проблема, которую ОП пытался решить. OP сообщает о проблеме с RequireJS, не находящей файлы из-за проблем с путями. Никакая подстройка под shim
не исправит это. Было бы целесообразно говорить о зависимостях в ответе, который фактически решает проблему, которую задавал ОП . Сам по себе, однако, это ответ, который не отвечает на заданный вопрос.