Почему jQuery создает глобальную переменную $, если она совместима с AMD?

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

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

requirejs.config({
    baseUrl: 'js',
    paths: {
        "jquery": "//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.0/jquery.min"
    }
});

require(["jquery"], function(jquery) {
    console.log(jquery);
    console.log($); // This works, but I wouldn't expect it to.
});

person Jake Wilson    schedule 11.02.2014    source источник


Ответы (1)


JQuery создает глобальную переменную $, поскольку JQuery не предназначен для использования в качестве модуля AMD, хотя и поддерживает его. Вы можете обернуть JQuery, чтобы удалить глобальную область $, как описано здесь, если вы прочитали раздел в JQuery это объясняет причины, по которым существует глобальная переменная. Я помню, как делал это, когда впервые начал использовать requirejs, но это вызвало некоторые проблемы с плагинами... насколько я помню

person jax    schedule 11.02.2014