2011-02-01 10 views
20

Używam requirejs po raz pierwszy w projekcie. Pracuję w środowisku, w którym jest już dużo skryptów JavaScript i szukam czystych sposobów na wprowadzenie własnego kodu.Używaj requirejs i jquery bez clobberingu globalnej jquery?

Problem polegający na tym, że nie mogę znaleźć modułu jQuery, który można załadować, nie blokuje istniejącego jQuery.

Byłem zaskoczony, że nawet wymagam-jquery.js wprowadza globalną wersję jQuery. Czy istnieje sposób na załadowanie jQuery jako modułu bez wprowadzania żadnych globaliów?

Odpowiedz

24

jQuery 1.7 obsługuje AMD załadunek. Ale problemem jest unikanie konfliktu nazw modułów, ponieważ jQuery koduje swoją własną nazwę modułu jako "jquery". Jeśli definiujesz inny moduł jako 'jquery' (powiedzmy, we właściwości 'paths' w Twojej konfiguracji requirejs), spowoduje to konflikt.

Aby załadować jQuery w zakresie aplikacji requirejs zdefiniuj moduł, takich jak 'jquery-loader' i kiedy chcesz załadować jQuery, zrób to za pomocą 'jquery-loader':

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

requirejs będzie "cache" odwołuje się do jQuery, aby noConflict działał tylko przy pierwszym ładowaniu jquery-loadera.

3

Wiele wersji jQuery na jednej stronie jest złe. Przestań hakować i ulepszaj jQuery lub użyj starszej wersji.

chodzi o utrzymanie $ bezpieczne spróbować

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


}(jQuery.noConflict(true)); 

Jeśli zdasz true do .noConflict zastąpi starą jQuery zmienną i nie zniszczyć, że w skali globalnej.

Oznacza to, że możesz przekazać go w spokoju. Załóżmy, że masz

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

Następnie stosując powyższy kod postawi 1.2 $ & jQuery powrotem w globalnej przestrzeni i daje 1,5 jQuery jako lokalny $ w zamknięciu

Ponownie radzę againts wykorzystujące wiele wersji, ponieważ jest to właściwy bałagan i koszmar utrzymania.

Jeśli używasz 1.5 można również użyć .sub co pozwala przedłużyć jQuery lokalnie bez uszkadzania globalny jQuery

+1

dobra rada przeciwko wielu wersjom ... ale jest kilka wtyczek cms, które są dostarczane z bibliotekami w pakiecie. Widziałem strony z 3 + wersjami jQuery/prototype wymieszane przez cms - Zastanawiam się, czy istnieje rozwiązanie, które zbliża się do podejścia YUI do wersjonowania ... – mfeineis

+9

Istnieją uzasadnione powody, aby wymagać tego innego niż ładowanie wielu wersji na jednym strona. Jeśli tworzę aplikację JS innej firmy, działa ona w nieznanych środowiskach.Muszę niezawodnie mieć wersję jQuery, której potrzebuję, bez przekierowywania strony konsumenta. –

+1

@RamenRecon "Tworzenie aplikacji JS innej firmy" "wymaga jQuery" LOLOLOLOLOLOLOLOLOLOL. – Raynos