2011-02-01 20 views
20

Estoy usando requirejs por primera vez en un proyecto. Estoy trabajando en un entorno que ya tiene mucho Javascript instalado y estoy buscando formas claras de introducir mi propio código.Usa requirejs y jquery, sin destruir global jquery?

El problema que tengo es que parece que no puedo encontrar un módulo de jQuery que pueda cargar que no destruya el jQuery existente.

Me sorprendió que incluso require-jquery.js presente una versión global de jQuery. ¿Hay alguna manera de cargar jQuery como módulo sin introducir ningún elemento global?

Respuesta

24

jQuery 1.7 soporta los procesadores AMD de carga. Pero el truco está en evitar un conflicto de nomenclatura de módulos, ya que jQuery codifica su propio nombre de módulo como 'jquery'. Si está definiendo otro módulo como 'jquery' (por ejemplo, en la propiedad 'paths' en su configuración requirejs), causará dicho conflicto.

Para cargar jQuery en su ámbito de aplicación RequireJS, definir un módulo, como 'jquery-loader' y cuando se desea cargar jQuery, hacerlo a través de 'jquery-loader':

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

RequireJS se 'caché' su referencia a jQuery para que noConflict solo se ejecute la primera vez que se carga jquery-loader.

3

varias versiones de jQuery en una página es malo. Deje de hackear y actualice jQuery o use la versión anterior.

cuanto a mantener segura $ tratar

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


}(jQuery.noConflict(true)); 

Si pasa true a .noConflict que reemplazará a la antigua jQuery variable y no destruir que a nivel mundial.

Esto significa que puede pasarlo silenciosamente. Digamos que tiene

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

Luego, utilizando el código anterior pondría al 1,2 $ & jQuery atrás en el espacio global y darle el 1,5 jQuery como un local $ en su cierre

Una vez más Aconsejo againts utilizando múltiples versiones porque es un desastre y una pesadilla de mantenimiento.

Si su uso 1.5 también se puede utilizar para .sub permitirá ampliar jQuery localmente sin corromper el mundial jQuery

+1

buenos consejos contra versiones múltiples ... pero hay algunos complementos cms que vienen con librerías empaquetadas. He visto páginas con 3+ versiones de jQuery/prototype mezcladas por el cms. Me pregunto si hay una solución que se acerque al enfoque de versiones de YUI ... – mfeineis

+9

Existen razones válidas para necesitar esto además de cargar varias versiones en una página. Si estoy desarrollando una aplicación JS de terceros, se estaría ejecutando en entornos desconocidos.Necesito tener de manera confiable la versión de jQuery que necesito sin obstruir la página del consumidor. –

+1

@RamenRecon "Desarrollar una aplicación de JS de terceros" "requiere jQuery" LOLOLOLOLOLOLOLOLOLOLOL. – Raynos

Cuestiones relacionadas