jQuery 1.7+, AMD (RequireJS) и глобальный охват - PullRequest
2 голосов
/ 07 января 2012

Я пытаюсь получить больше в строке с AMD, и я наткнулся на что-то в исходном коде jQuery, которое я просто не могу предпринять.

Вот раздел (найденный незадолго до концафайла):

if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
    define( "jquery", [], function () { return jQuery; } );
}

Из того, что я вижу, одним из основных моментов AMD является поддержание чистоты глобального охвата.Тем не менее, jQuery предпочитает возвращать ссылку на себя как на модуль, но все же заражает глобальное пространство.

Мне кажется, что добавление "jQuery.noConflict ();";незадолго до того, как return разрешит это и все еще вернет объект в виде модуля.

Я знаю, что RequireJS имеет несколько специальных файлов специально для jQuery, но я не уверен, что он необходим для 1.7 +.

Мой вопрос состоит из 2 частей:

1) Кто-нибудь знает, почему было принято это решение?

2) Поскольку этот подход не подходит для обновления, кто-нибудь знаком с более элегантным решением?который использует стандартную версию RequireJS и jQuery?

1 Ответ

3 голосов
/ 07 января 2012

Хорошо, сразу после публикации я просто понял, что могу прокси через другой файл:

//main.js
require.config({
    paths : {
    jquery : 'my/libs/jquery-1.7.1.min',
    jQuery : 'my/src/jquery'
}

и

//my/src/jquery.js

define([
        'jquery'
    ],
    function($) {
        $.noConflict(true);

        return $;
    }
);

Причина псевдонима 'jquery' для основного файла, а не просто ссылка на полностью определенное местоположение в прокси, заключается в том, что я использую готовую для AMD ветвь Backbone, которая зависит от этого псевдонима:

https://github.com/jrburke/backbone/blob/2b0cfb4282f071cffb14a9573d703da6acc5febd/backbone.js

Автор получил несколько коммитов, принятых в Cloud Cloud, и надеется, что это изменение также будет внесено.

Будет интересно посмотреть, есть ли в этом какие-либо недостатки или какие дополнительные ответы могут быть получены из протестированной битвы AMD.

...