He estado buscando varios cargadores de recursos asíncronos y aún no estoy seguro de cuál usar. Donde trabajo tenemos esfuerzos grupales dispares cuyos módulos de clase pueden usar diferentes versiones de jQuery (etc.). Como tal, las dependencias anidadas también pueden diferir. No tengo control sobre esto, por lo que esto significa que necesito cargar dinámicamente recursos que pueden usar versiones alternativas de la misma biblioteca.
Como tal, aquí están mis requisitos:
- Cargue archivos de recursos JavaScript y CSS de forma asincrónica.
- Administre el orden de dependencia y las dependencias anidadas en todas las versiones.
- Detecta si un recurso ya está cargado.
- Debe permitir la carga entre dominios (CDN)
- (opcional) Permítanos descargar un recurso.
He estado mirando:
Podría falsificar estos requisitos yo mismo cargando versiones en variables con espacios de nombres adecuados y usando una matriz para rastrear lo que ya está cargado ... pero (con suerte) alguien ya lo ha inventado.
Entonces mis preguntas son:
- ¿Cuáles usas? ¿Y por qué?
- ¿Hay otros que satisfagan completamente mis requisitos?
- ¿Con cuál te parece más elocuente y más fácil trabajar? ¿Y por qué?
ACTUALIZACIÓN:
Para aquellos interesados, probé todas las bibliotecas AMD anteriores (y más). Al final, fui con RequireJS . En general, es más limpio y fácil ... y me alegro de estar usándolo.
fuente
getScript
función para la inyección de script.Respuestas:
He usado RequireJS en proyectos serios, y me encanta, pero en realidad no está destinado a ser un cargador asíncrono. Realmente está destinado a ser un sistema de módulos. La carga asincrónica se proporciona en servicio para ese objetivo. Se puede presionar para cumplir con cualquiera de sus requisitos, pero sus servicios de carga están diseñados para cargar módulos, no archivos arbitrarios.
Cargue archivos de recursos de JavaScript y CSS de forma asíncrona : Requirejs carga los módulos que necesite mediante la inyección de etiquetas de script, de manera asíncrona.
Administre el orden de dependencia y las dependencias anidadas en todas las versiones : aquí es donde RequireJS brilla. Los módulos pueden declarar dependencias en otros módulos, y el orden de carga se extrapolará de esa declaración de dependencia. También hay un complemento de orden, que puede forzar el orden en las dependencias.
Detecta si un recurso ya está cargado : Requirejs solo cargará un módulo una vez.
Debe permitir la carga entre dominios (CDN) : esto es posible, pero requiere cierta configuración; Puede establecer una URL específica para cualquier módulo, y eso anulará la ubicación predeterminada, por lo que puede establecerlo en un CDN.
RequireJS servirá mejor si escribe módulos usando su formato, y será menos efectivo si lo está usando para cargar JavaScript sin procesar.
También proporciona un proceso de compilación que fusionará sus módulos en un solo archivo para producción.
fuente
En teoría, podría simplemente mantener una lista de scripts ya cargados, y hacer una función que cargue scripts que aún no se hayan cargado.
http://jsfiddle.net/BDG/Dhdu7/2/
fuente
Si está buscando RequireJS y desea depender de los archivos CSS, puede verificar el complemento CSSP RequireJS :
fuente