Estoy usando requirejs por primera vez en un proyecto. Estoy trabajando en un entorno que ya tiene una gran cantidad de Javascript y estoy buscando formas limpias de introducir mi propio código.
El problema que tengo es que parece que no puedo encontrar un módulo de jQuery que pueda cargar y que no supere a jQuery existente.
Me sorprendió que incluso require-jquery.js presenta una versión global de jQuery. ¿Hay alguna manera de cargar jQuery como un módulo sin introducir ningún global?
jQuery 1.7 admite la carga de AMD. Pero, el truco es evitar un conflicto de nombres de módulos, ya que jQuery codifica su propio nombre de módulo como 'jquery'. Si está definiendo otro módulo como 'jquery' (digamos, en la propiedad 'paths' en su configuración de requirejs), causará dicho conflicto.
Para cargar jQuery en el alcance de su aplicación requirejs, defina un módulo, como 'jquery-loader' y cuando desee cargar jQuery, hágalo a través de 'jquery-loader':
define(['path/to/jquery.min'], function () { return jQuery.noConflict(true); });requirejs 'almacenará' su referencia a jQuery para que noConflict solo se ejecute la primera vez que se cargue jquery-loader.
Varias versiones de jQuery en una página son malas. Deje de piratear y actualice jQuery o use la versión anterior.
En cuanto a mantener $ seguro, intente
(function($) { // requirejs inclusion block for loading }(jQuery.noConflict(true)); Si pasa true a .noConflict , reemplazará la antigua variable jQuery y no la destruirá globalmente.
Esto significa que puedes pasarlo tranquilamente. di que tienes
<script src="jquery-1.2"> <script src="jquery-1.5"> Luego, usar el código anterior colocaría el 1.2 $ y jQuery nuevamente en el espacio global y le daría el 1.5 jQuery como un $ local en su cierre
Una vez más, aconsejo DE NUEVO el uso de múltiples versiones porque es un verdadero desastre y una pesadilla de mantenimiento.
Si usa 1.5, también puede usar .sub para permitirle extender jQuery localmente sin corromper el jQuery global
cargue el script jQuery y luego use var myJ = jQuery.noConflict();
o cualquier variable de atajo que quieras