2012-07-11 7 views
5

Stiamo creando un framework che intendiamo utilizzare in più progetti. Tutti i progetti useranno require.js per gestire moduli e dipendenze.Come si può creare una libreria riutilizzabile strutturata come modulo/i AMD?

Idealmente mi piacerebbe utilizzare l'ottimizzatore r.js su compilare il framework in un singolo file che può essere fornito alle applicazioni che lo utilizzano. Questo file conterrà tutti i moduli del framework in modo tale che nella mia richiesta posso scrivere codice come:

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

ma sembra ci sono due problemi con questo approccio.

  1. A seconda framework/util/a non dice require.js di cui ha bisogno per caricare framework.js in cui si troverà util/a
  2. Lo strumento ottimizzare genera i nomi di tutti i moduli inclusi in framework.js quali define("util/a", function() { ... }); anche se require.js caricato framework.js v'è nulla che gli dice che il modulo definito util/a è un modulo relativo alla framework e come tale è identificato come framework/util/a

mi manca Somet hing o è un approccio migliore per strutturare il mio framework come pacchetto CommonJS e utilizzare l'opzione di configurazione di require.js packages?

+0

Non credo ci sia un modo ragionevole per farlo. Da @jrburke: "solo" distribuire i moduli in una directory in formato sorgente, "no build". – rharper

risposta

2

Re: 1. Sembra che l'ottimizzazione di r.js non sia stata progettata per ottimizzare gli alberi a dipendenza parziale, poiché le cerniere di caricamento pigro sui percorsi dei file. Per esempio. chiedere path/to/module di caricare effettivamente path/to sembrerebbe un hack. Una soluzione sarebbe quella di rinunciare al caricamento pigro e includere framework-built.js sopra il codice dell'applicazione.

Rif .: 2. Quindi ora è necessario il tuo framework-built.js con percorsi completi. Un modo sarebbe quello di costruire un genitore fittizio che richiede tutto il framework, ad esempio dummy-framework.js. In questo modo il tuo dummy-framework-built.js avrà il percorso completo definito per framework e, se non è pigro, dovrebbe funzionare correttamente.

Diniego: Non ho usato require.js più di tanto, anche se questo è il mio migliore sforzo :)

+0

Grazie per lo sforzo. Il tuo approccio mi avvicina di più a quello che volevo ottenere - ciò che merita sicuramente è l'up-vote. Tuttavia, una rapida conversazione con jrburke mi dice che probabilmente non voglio compilare la libreria e invece di distribuire semplicemente l'intera cartella sorgente. – rharper

+0

Ho chiacchierato anche con James, ho anche imparato un po 'di più da quando l'ho postato. Vedi http://stackoverflow.com/questions/12302440/requirejs-is-there-a---to-achieve-multiple-base-urls dove ho risposto alla mia domanda. Quindi realizzo un'applicazione 'framework' usando i 'percorsi' personalizzati per il caricamento lazy in tempo reale, e in produzione, localmente, costruisco indicando questi stessi percorsi al 'framework' locale che è solo una cartella di pari livello. – jpillora