как найти все случаи использования jQuery или Zepto в вашем коде - PullRequest
1 голос
/ 05 октября 2011

Моя команда и я хотим поддерживать низкую стоимость переключения с Zepto на другую среду или вызовы из собственного браузера (мы используем только WebKit) при его использовании.

Какова тактика отслеживания меств коде, где используется Zepto?Есть ли что-нибудь лучше, чем поддерживать список используемых методов в Readme?Как бы вы это сделали?

Ответы [ 3 ]

1 голос
/ 05 октября 2011

jQuery : Вы можете использовать noConflict, чтобы назначить какое-то красивое, уникальное имя для функции jQuery (возможно, само по себе jQuery, поскольку оно встроено, но если это будет проблемой, то другое легкоотличается от других вещей, таких как $jq или что-то подобное - noConflict возвращает функцию jQuery, поэтому вы можете сделать это, например var $jq = jQuery.noConflict();).

Zepto : несмотря на утверждение«jQuery-совместимый синтаксис», по-видимому, не поддерживает noConflict как таковой.Однако, похоже, что если $ уже определен для объекта window, он оставит его в покое из-за этой строки:

'$' in window || (window.$ = Zepto);

Поэтому определите $ перед загрузкой Zepto изатем используйте только Zepto в своем коде (или присвойте ему что-нибудь уникальное, например $jq или $zt и т. д., например, var $zt = Zepto;).

В любом случае: затем выполните поискВаш код для тех, если / когда вам нужно найти эти биты.

1 голос
/ 14 октября 2011

Помимо поиска $ и конкретных методов, вы можете определить, какие методы используются, путем регистрации их использования в исполняемом коде.

Следующий код будет регистрировать используемую функцию и трассировку стека каждый раз, когда вы делаетеВызов jQuery, но не ведение журнала внутренних вызовов, выполненных jQuery.

<script>
(function(){
var insideJQuery = false;
function replaceMethod(obj, method, prefix) {
    var oldMethod = obj[method];
    if(typeof oldMethod !== "function")
        return;

    obj[method] = function() {
        var externalCall = !insideJQuery;
        insideJQuery = true;
        var output = oldMethod.apply(this, arguments);

        if(externalCall) {
            console.log(prefix + method + ' called');
            console.trace();
            insideJQuery = false;
        }

        return output;
    }
}

for(var method in $.fn) {
    if(method != 'constructor' &&
       method != 'init')
        replaceMethod($.fn, method, '$.fn.');
}

for(var method in $) {
    if(method != 'Event')
        replaceMethod($, method, '$.');
}
})();
</script>

Исключением, конечно, могут быть вызовы jQuery внутри вызовов jQuery, например $(document).ready(function(){$('div')});.

0 голосов
/ 05 октября 2011

Хм, вы можете найти знак $?

Каждый метод, такой как parents(), будет вызываться для чего-то, что в конечном итоге было создано со знаком $. Поэтому, если вы найдете все экземпляры $ и проследите использование полученных переменных, у вас будет все.

...