2012-07-11 10 views
5

Estamos creando un marco que tenemos la intención de utilizar en múltiples proyectos. Todos los proyectos usarán require.js para administrar módulos y dependencias.¿Cómo se puede crear una biblioteca reutilizable estructurada como módulo (s) de AMD?

Idealmente, me gustaría utilizar el optimizador r.js para compilar el marco en un único archivo que se puede proporcionar a las aplicaciones que lo utilizan. Ese archivo contendrá todos los módulos del marco de tal manera que en mi aplicación puedo escribir código como:

define(["framework/util/a", "framework/views/b"], function(A, B) { 
    var a = new A(); 
    // etc... 
}); 

pero parece que hay dos problemas con este enfoque.

  1. Dependiendo de framework/util/a no le dice a require.js que necesita cargar framework.js en la que se encuentra util/a
  2. La herramienta Optimizar genera nombres de todos los módulos incluidos en framework.js como define("util/a", function() { ... }); incluso si require.js cargado framework.js no hay nada que le indica que el módulo definido util/a es un módulo relativo a framework y como tal se identifica como framework/util/a

me estoy perdiendo Somet hing o es un mejor enfoque para estructurar mi framework como un paquete CommonJS y usar la opción de configuración de require.js packages?

+0

No creo que hay una forma razonable de hacer esto. Desde @jrburke: "solo 'distribuya los módulos en un directorio en forma de fuente', no compilación". – rharper

Respuesta

2

Re: 1. Parece que, de hecho, la optimización de r.js no fue diseñada para optimizar los árboles de dependencias parciales, ya que la carga diferida depende de las rutas de archivos. P.ej. pidiendo path/to/module para realmente cargar path/to parecería un truco. Una solución sería renunciar a la carga diferida e incluir framework-built.js sobre su código de aplicación.

Re: 2. Así que ahora necesitará su framework-built.js con rutas completas. Una forma sería construir un padre ficticio que requiera todo framework, digamos dummy-framework.js. De esta forma, su dummy-framework-built.js tendrá la ruta de acceso completa definida para framework y, si no está cargada de manera diferida, debería funcionar correctamente.

de responsabilidad: No he utilizado require.js casi nada, aunque eso es mi mejor esfuerzo :)

+0

Gracias por el esfuerzo. Su enfoque me acerca lo más posible a lo que quería, definitivamente merece el voto positivo. Sin embargo, una conversación rápida con jrburke me dice que probablemente no quiero compilar la biblioteca en absoluto y en su lugar solo distribuyo toda la carpeta fuente. – rharper

+0

También he hablado con James, también aprendí un poco más desde que publiqué esto. Ver http://stackoverflow.com/questions/12302440/requirejs-is-there-a-way-to-achieve-multiple-base-urls donde respondí mi propia pregunta. Por lo tanto, logro una aplicación 'framework' utilizando 'paths' personalizados para la carga diferida en vivo, y en producción, localmente, construyo apuntando estas mismas rutas al 'framework' local que es solo una carpeta de hermanos. – jpillora

Cuestiones relacionadas