Бриз требует нокаута при использовании requirejs
Я получаю некоторые странные поведения, загружая breezejs в приложение, которое также использует requirejs.
Основная проблема заключается в том, что если мне требуется установка для загрузки breeze (плюс его зависимости q и jquery), breeze не загружается, если нокаут не настроен как зависимость breeze.
Uncaught Error: имя модуля "ko" еще не загружено для контекста: _. Используйте требуют ([])
Это хорошо, если я на самом деле хотел использовать нокаут, но я использую угловой. Я думаю, что это тоже ничего не сломит, чтобы загрузить нокаут, но это пустая трата времени для загрузки, если он никогда не привыкнет.
Итак, мой первый вопрос: почему бриз требует нокаута только потому, что я использую requirejs? Похоже, ошибка для меня.
Другое странное поведение WRT breeze и require заключается в том, что если я загружаю require, а затем breeze без использования require, то breeze не загружается.
Uncaught Error: Несоответствующий анонимный модуль define()...
Кажется, что breeze предполагает, что если нагрузка будет загружена, то она будет загружена запросом. Но это похоже на скачок, чтобы предположить. Я столкнулся с этой проблемой, так как я впервые обнаружил предыдущую проблему. Я думал, что я просто загружу ветер самостоятельно вместо того, чтобы требовать сделать это. Конечно, загрузка все еще требовала, так как другие части приложения полагаются на требование.
Итак, мой второй вопрос: почему бриз должен быть загружен раньше, чем требуется? Просто кажется странным, так как две библиотеки не зависят друг от друга. Почему существует требуемый порядок загрузки?
1 ответ
С веб-сайта Breeze:
Breeze зависит от одной сторонней библиотеки JavaScript, Q.js, которая включена в NuGet и пакеты загрузки. Q.js является популярной реализацией стандарта обещаний Common.js для управления асинхронным JavaScript.
Это означает, что если вы загрузили Q.js, он может конфликтовать с requirejs, потому что это просто другая реализация загрузчика AMD.
Также:
За исключением отмеченного, для других примеров также требуются эти библиотеки, и они загружают сценарии jQuery и Knockout перед сценариями Q и Breeze. Убедитесь, что вы либо следуете их примеру... или знаете, почему вы делаете это по-другому.
Вы должны быть в состоянии настроить, чтобы уйти без нокаута. Вот что в их исходном коде:
Возможные варианты: "ko", "backingStore" или "backbone". См. Метод breeze.config.initializeAdapterInstances.
http://www.breezejs.com/sites/all/apidocs/classes/config.html
Надеюсь это поможет.
ОБНОВЛЕНИЕ: Глядя на источник ветерка, я вижу, что если требуется загрузчик, они попытаются загрузить нокаут как 'ko'. Вы должны иметь возможность настроить загрузчик requireJS, чтобы обойти это, определив свой собственный модуль 'ko', который ничего не возвращает или возвращает false. Тогда ветер вернется к "backingStore" и не должен на это жаловаться.
ОБНОВЛЕНИЕ ПО WARD (20 МАЯ 2013 ГОДА): это будет исправлено в версии после v.1.3.3. Пожалуйста, обратитесь к этой более поздней SO, где мы предоставим временную консультацию и объявим об исправлении.