Estoy escribiendo un script que debe incrustarse en sitios de terceros para agregarles funcionalidad. Recientemente arranqué mi código de cargador personalizado bastante desordenado y comencé a reemplazarlo con requirejs. Una de las bibliotecas que opcionalmente se carga para mí (depende de algunos parámetros ingresados) es jQuery.Hacer que no se vuelva a cargar JQuery si ya está en la página
Esto funciona bien, hasta que mi script esté incluido en una página que ya tiene jQuery, en cuyo caso, lo que parece suceder es que algunos complementos se cargan parcialmente, requieren jQuery sobre la versión de la página y los complementos se rompen rápidamente.
No se puede pedir a los clientes que reescriban sus páginas solo para utilizar este script, así que lo que me gustaría hacer es detectar si jQuery ya está cargado, si es así, saltearlo mediante requirejs, y simplemente usar el ya cargado uno (Esto posiblemente me abra a casos e inconvenientes de bordes impares cuando están usando una versión mucho más antigua de jQuery, pero no tengo muchas opciones).
Lo que pensé que iba a hacer es escribir un nuevo módulo, que primero vería si jQuery está cargado, si es así, solo exporte el objeto jQuery, si no lo está, luego cárguelo y luego realice la exportación. Sin embargo, parezco estar bloqueado, ya que la función de definición para el módulo parece tener que ser síncrona para funcionar, por lo que no puedo apagar y cargar otro script, que sería asíncrono, luego rellenar la exportación en requirejs.
¿Me falta algo en los documentos? ¿Es lo que estoy intentando imposible?
¿Ayudaría poder [cargar dos versiones diferentes de jQuery al mismo tiempo] (http://stackoverflow.com/q/1566595/33732)? –
Eso resolvería los problemas de control de versiones. Sin embargo, esto no parece resolver el problema del plugin, ya que es muy probable que la versión en la página se cargue antes que la mía y no tenga ningún conflicto. Supongo que podría modificar mi versión servida de jQuery para no pisotear los objetos $/jQuery, y solo exponerme como un módulo, pero preferiría hacerlo como último recurso, ya que entonces tendría que recordar hacer eso cambiar cuando actualizo jQuery. –
Eso no debería importar. Solo una de las bibliotecas debe conocer el modo sin conflicto.Cuando llama a 'noConflict' en su copia de jQuery, los valores de' $ 'y' jQuery' se restauran a los originales, desde antes de que se cargara su copia. Los complementos que utilizaron la instancia original seguirán refiriéndose a ella. La instancia original de jQuery asumirá que es la única, lo cual está bien. –