Модуль RequireJS пытается загрузить модифицированный модуль

У меня возникла проблема с попыткой создать прокладку RequireJS для некоторого кода javascript, написанного другой командой в моей организации. Скрипт загружается через HTML-скрипт noraml как таковой:

<script src="MyCustomModule.js" type="text/javascript"></script>

Мой main.js содержит следующее:

requirejs.config({
    paths: { 'text': 'durandal/amd/text' },
    shim: {
        'MyCustomModule': { exports: 'My.Custom.Module' }
    }
});

И я пытался получить доступ к пользовательскому модулю различными способами, но это мой текущий код:

define(['MyCustomModule'], function (require, MyCustomModule) {
 ...
}

Но каждый раз, когда загружается страница/приложение, я получаю сообщение об ошибке от RequireJS, указывающее, что ему не удалось загрузить app/MyCustomModule.js (и я вижу ошибку 404 в консоли, где он пытался запросить файл с сервера). Что я делаю неправильно?


person CodingGorilla    schedule 17.07.2013    source источник


Ответы (1)


Вам также необходимо включить MyCustomModule в paths:

requirejs.config({
    paths: {
        'text': 'durandal/amd/text'
        'MyCustomModule': 'path/to/MyCustomModule'
    },
    shim: {
        'MyCustomModule': {
            exports: 'My.Custom.Module'
        }
    }
});

Если вы этого не сделаете, define(['MyCustomModule'] (...) будет искать зависимость в расположении baseUrl, в вашем случае: app/MyCustomModule.


Другими словами: shim не может «подбирать» глобальные переменные, которые не загружены RequireJS.

person kryger    schedule 17.07.2013
comment
Это где-то задокументировано, документация по адресу: requirejs.org/docs/api.html#config -shim ничего не говорит о настройке путей (но я обязательно попробую, когда завтра вернусь к работе). - person CodingGorilla; 18.07.2013
comment
Почти вся глава, на которую вы ссылаетесь, вроде подразумевает, что прокладка работает только для зависимостей, загруженных RequireJS ( предполагается, что [библиотеки] были установлены в каталоге baseUrl. Если нет, вам может потребоваться установить пути для них:, Для загрузки модулей, которые являются частью конфигурации оболочки или используют ее, требуется обычный вызов require/define и т. д.), но вы правы, это не кажется, не упоминает об этом явно. Вот альтернативное (без прокладки) решение идентичной проблемы, предложенное самим Джеймсом Берком: groups.google.com/forum/#!msg/requirejs/CI79vnKEsWM/ - person kryger; 18.07.2013
comment
По сути, это то, что мы уже делаем, я надеялся очистить около 15 из этих файлов, внедрив прокладки. Кажется, что прокладки - более чистый способ сделать это. Возможно, нет... - person CodingGorilla; 18.07.2013
comment
Это действительно исправило это, но вызвало другие проблемы. Похоже, мы должны придерживаться решения, предложенного Джеймсом Берком. Спасибо за информацию. - person CodingGorilla; 18.07.2013