Подтвердить что ты не робот

Использовать requirejs и jquery, не сбивая глобальный jquery?

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

Проблема, с которой я сталкиваюсь, заключается в том, что я не могу найти модуль jQuery, который я могу загрузить, который не сбивает существующие jQuery.

Я был удивлен, что даже require-jquery.js представляет глобальную версию jQuery. Есть ли способ загрузить jQuery в качестве модуля без введения каких-либо глобальных переменных?

4b9b3361

Ответ 1

jQuery 1.7 поддерживает загрузку AMD. Но трюк избегает конфликта имен имен, так как jQuery жестко кодирует собственное имя модуля как "jquery". Если вы определяете другой модуль как "jquery" (скажем, в свойстве "paths" в config вашего requirejs), это вызовет указанный конфликт.

Чтобы загрузить jQuery в область приложения requirejs, определите модуль, например "jquery-loader", и когда вы хотите загрузить jQuery, сделайте это через "jquery-loader":

define(['path/to/jquery.min'], function () {
    return jQuery.noConflict(true);
});

requirejs будет "кэшировать" вашу ссылку на jQuery, чтобы noConflict запускал только первый загрузчик jquery-loader.

Ответ 2

Несколько версий jQuery на одной странице плохие. Остановите взлом и обновите jQuery или используйте более старую версию.

Как сохранить $ безопасную попытку

(function($) {
    // requirejs inclusion block for loading


}(jQuery.noConflict(true));

Если вы пройдете true до .noConflict, он заменит старую переменную jQuery и не уничтожит ее глобально.

Это означает, что вы можете спокойно передать его. Скажем, у вас

<script src="jquery-1.2">
<script src="jquery-1.5">

Затем, используя вышеприведенный код, верните 1,2 $ и jQuery обратно в глобальное пространство и дайте 1.5 jQuery в качестве локального $ в вашей закрытии

Снова я советую AGAINTS использовать несколько версий, потому что это правильный беспорядок и кошмар обслуживания.

Если вы используете 1.5, вы также можете использовать .sub, чтобы разрешить локальное расширение jQuery, не повредив глобальный jQuery