RequireJS: пути не разрешаются правильно (и отличаются в разных браузерах)

0

Я использую 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. Изменение имен файлов, чтобы их нет - в них ничего не сказалось - проблема все еще существует.

  • 0
    Я знаю, что название довольно неловко сформулировано. Если кто-то может придумать что-то лучше для названия этого вопроса, я бы хотел изменить его, поэтому, пожалуйста, дайте мне знать!
  • 0
    Можете ли вы попробовать переименовать вещи, чтобы не использовать «-», чтобы мы точно знали, что является причиной проблемы?
Показать ещё 2 комментария
Теги:
requirejs

2 ответа

0
Лучший ответ

Проблема заключалась в том, что другой модуль RequireJS вмешивался в это. Поскольку они загружаются асинхронно, разница между Chrome и Internet Explorer заключается в том, что модули загружаются в другом порядке. Часть внешнего модуля RequireJS загрузится, а затем внутренний, который изменил конфигурацию RequireJS, а затем остальную часть внешнего модуля (не удалось) загрузить.

Я исправил его, используя миндаль, чтобы обернуть внутренний модуль.

0

Простое решение:
Нажмите jquery-ui в отпечатки пальца

shim: {
    "jquery-ui": {
        exports: "$",
        deps: ["jquery"],
        async: false
    },
    "jquery-ui-touch-punch": {
        exports: "$",
        deps: ["jquery", "jquery-ui"],
        async: false
    }
}
  • 0
    То, что jquery-ui-touch-punch зависит от jquery-ui , вероятно, верно, но это не та проблема, которую ОП пытался решить. OP сообщает о проблеме с RequireJS, не находящей файлы из-за проблем с путями. Никакая подстройка под shim не исправит это. Было бы целесообразно говорить о зависимостях в ответе, который фактически решает проблему, которую задавал ОП . Сам по себе, однако, это ответ, который не отвечает на заданный вопрос.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню