2015-05-04 7 views
0

Я пытаюсь Призонной шайба определенных модулей для использования с миндалем, как так: уже включеныИспользования прокладок конфигурации с миндалем

<script> 
requirejs.config({ 
    shim: { 
    'jQuery': { exports: 'jQuery' }, 
    //etc. 
</script> 

, как некоторые скрипты. Тем не менее, этот код:

require(['jQuery', function($) { 

}); 

Результаты «неопределенный недостающий jQuery». Если я зациклирую jQuery следующим образом:

define('jQuery', function() { 
    return jQuery; 
}); 

это работает.

Я не строить свои JS вообще, просто сбросив almond.js в существующий веб-программного обеспечения, так что я могу развивать свои новые компоненты с AMD. Я хотел бы подделать существующие глобальные переменные для своих новых модулей.

Я угадывание прокладка только решается на сборку и что сборка делает именно то, что я делаю выше, это правильно?

+1

Да, Almond, вероятно, нуждается в модулях, которые должны быть встроены в один файл. – Jack

+1

jquery уже является модулем amd, ему не нужна конфигурация прокладки. Однако он определяет себя как именованный модуль с именем 'jquery', все в нижнем регистре. – ekuusela

ответ

1

Имя для JQuery жестко закодировано в «JQuery». Если вы отклонитесь от этого, у вас возникнут проблемы. Но это не ваша единственная проблема.

Использование shim не совпадает с вызовом define с именем модуля. Когда вы используете shim, как вы делаете в своем вопросе, вы сообщаете загрузчику, что существует модуль с именем jQuery и что после того, как модуль загружен, RequireJS должен вернуть в качестве значения модуля значение переменной jQuery. Важно подчеркнуть текст: загрузчик будет загружать и загружать модуль с именем jQuery.

define, который вы укажете в своем вопросе, обычно будет размещен вместе с вызовом require.config либо непосредственно перед ним, либо сразу после него. Это объявляет модуль с именем jQuery. Поскольку модуль уже находится , там, когда загрузчик должен получить этот модуль, извлечь его нечего. Это важная разница, когда дело доходит до миндаля.

Миндаль имеет restrictions, один из них:

оптимизировать все модули в одном файле - нет динамического кода загрузки.

(Emphasis добавлен.) Используя термины, которые я использовал в этом ответе, это означает «отсутствие выбора». Когда вы используете свой звонок define, вы в порядке. Когда вы используете shim, то , если вы не оптимизировали свои модули в один файл, загрузчик должен попробовать выборку модуля. Миндаль не может этого сделать.

+0

Thx для вашего ответа Луи. Я понимаю понятия RequireJS и Almond. Я не пытался заставить Almond получать jQuery, просто не искать модуль с именем «jQuery» и вместо этого возвращать глобальный объект «jQuery». Но это выглядит так: а) jQuery называет себя «jquery» и b) прокладки разрешены для сборки для Almond. В конечном итоге я работал с RequireJS в этом проекте. Могу переключиться на Алмонд снова, когда я построю. – Chris

 Смежные вопросы

  • Нет связанных вопросов^_^