2011-02-01 6 views
20

Sto usando requirejs per la prima volta su un progetto. Sto lavorando in un ambiente che ha già un sacco di javascript e sto cercando modi puliti per introdurre il mio codice.Usa requirejs e jquery, senza jolly globale che sta rovesciando?

Il problema che sto avendo è che non riesco a trovare un modulo di jQuery che posso caricare che non clobber jQuery esistente.

Sono stato sorpreso dal fatto che anche require-jquery.js introduce una versione globale di jQuery. C'è un modo per caricare jQuery come un modulo senza introdurre alcun globale?

risposta

24

jQuery 1.7 supporta la tecnologia AMD carico. Ma il trucco è evitare un conflitto di denominazione dei moduli, dal momento che jQuery codifica il proprio nome del modulo come "jquery". Se stai definendo un altro modulo come 'jquery' (diciamo, nella proprietà 'paths' nella tua configurazione requirejs), causerà detto conflitto.

Per caricare jQuery nella vostra portata di applicazione requirejs, definire un modulo, come ad esempio 'jquery-loader' e quando si desidera caricare jQuery, farlo via 'jquery-loader':

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

requirejs volontà 'cache' il tuo riferimento a jQuery in modo che noConflict venga eseguito solo la prima volta che viene caricato jquery-loader.

3

Più versioni di jQuery in un'unica pagina è male. Interrompere l'hacking e aggiornare jQuery o utilizzare la versione precedente.

quanto per mantenere $ sicuro provare

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


}(jQuery.noConflict(true)); 

Se si passa ad true.noConflict sostituirà il vecchio jQuery variabile e non a distruggere che a livello mondiale.

Questo significa che è possibile passare tranquillamente. Diciamo che avete

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

Quindi, utilizzando il codice di cui sopra avrebbe messo la 1.2 $ & jQuery indietro nello spazio globale e vi darà la 1.5 jQuery come un locale $ in chiusura

Anche in questo caso vi consiglio CONTRO IL utilizzando versioni multiple perché è un pasticcio giusto e un incubo di manutenzione.

Se la vostra utilizzando 1.5 è anche possibile utilizzare .sub per consentire di estendere jQuery localmente senza danneggiare il globale jQuery

+1

buon consiglio contro più versioni ... ma ci sono alcuni plugin per i cms che vengono con le librerie pacchettizzate. Ho visto pagine con 3+ versioni jQuery/prototipo mixate dal cms - Mi chiedo se c'è una soluzione che si avvicina all'approccio di versioning di YUI ... – mfeineis

+9

Ci sono validi motivi per aver bisogno di questo oltre al caricamento di più versioni su una pagina. Se sto sviluppando un'app JS di terze parti, sarebbe in esecuzione in ambienti sconosciuti.Ho bisogno di avere la versione di jQuery che ho bisogno senza rovinare la pagina del consumatore. –

+1

@RamenRecon "Sviluppare app JS di terze parti" "richiede jQuery" LOLOLOLOLOLOLOLOLOL. – Raynos