Как использовать мою собственную версию jQuery с модулями просмотра

(Я должен уточнить: мой вопрос о замыканиях и шаблонах клиентских модулей в Javascript. Дело не в том, как использовать jQuery.noConflict ().)

У меня есть немного Javascript, который люди могут добавлять на свои сайты. Я хочу, чтобы мой собственный код имел доступ к переменной $, которая разрешает конкретную версию jQuery, которая не зависит от того, что страница загружена. Это легко, если весь мой код находится в одном файле внутри замыкания, которое я определяю. Но я изо всех сил пытаюсь найти чистый способ сделать это, используя шаблон модуля, где мой код находится в отдельных замыканиях.

Фон (т.е. очевидная вещь, котораяне эта проблема)

Это было легко, когда весь мой код был в одном файле. Я мог бы просто создать $ var в моем внешнем закрытии и использовать $ .noConflict (...), чтобы убедиться, что внешняя страница сохранила свою собственную версию jQuery. Что-то вроде этого:

// This is easy and works as you'd expect
(function() {

    var $; // The $ var in my local scope that the rest of my code can use.

    function loadMyVersionOfjQuery() {
        insertTheAppropriateScriptTagAndWaitForTheScriptToLoad(function() {
            // Set the $ in my local scope and restore the global jQuery.
            $ = jQuery.noConflict(true);
        }
    }

    loadMyVersionOfjQuery();

    ... etc. ...
})();

Сейчас я делаю код на отдельные файлы с помощью browserify, и это уже не так просто. Больше всего проблем связано с тем, что моя версия jQuery загружается асинхронно. Таким образом, во время обработки моего модуля require () моя версия jQuery не готова. Это мешает мне просто создать и назначить $ var на верхнем уровне закрытия моего модуля.

Некоторые идеи, которые я изучил

Если бы я мог отложить инициализацию моих модулей до запуска jQuery, то каждый из моих модулей мог бы определить свой собственный $ var. Но это не представляется возможным. Похоже, что мои вызовы require (...) агрессивно проходят, даже если я пытаюсь скрыть их внутри обратных вызовов функций (кажется, что browserify фактически анализирует JS, чтобы найти операторы require).Если бы я мог определить динамический прокси-объект, я мог бы инициализировать свои собственные $ vars с прокси, который позже делегировал бы мою загруженную версию jQuery. Но Javascript не поддерживает динамический шаблон прокси.Browserify фактически определяет замыкание, которое оборачивает все мои модули, когда они «переносятся» в один файл. Если бы я мог как-нибудь дать ему фрагмент кода для вставки в это замыкание (просто «var $;»), я был бы в бизнесе. Но я не нашел способа сделать это.В крайнем случае мне пришло в голову, что я могу создать свое собственное замыкание вокруг вывода browserify и определить нужную мне переменную области видимости. Путем обработки выходного файла или хакерской конкатенации пары простых файлов вокруг содержимого browserify (что-то вроде "(function () {var $;" + bundle.js + "}) ();". Но это просто слишком хакерский

У кого-нибудь есть какие-либо идеи? Как вы разрабатываете клиентские модули Javascript в нескольких файлах, но все же получаете закрытие для всего вашего кода вместе?

Ответы на вопрос(2)

Ваш ответ на вопрос