2013-07-29 8 views
5

È possibile importare singoli moduli da un pacchetto RequireJS/r.js ottimizzato?RequireJS - Importazione di moduli all'interno del pacchetto ottimizzato r.js

Ho un progetto JavaScript suddiviso in due componenti separati - 'MyLibrary' e 'MyApplication'

MyLibrary è costituito da due moduli separati, 'myModule1' e 'MyModule2'.

In modalità sviluppo, è possibile importare ciascuno di questi moduli utilizzando RequireJS con la sintassi di definizione normale (['MyLibrary/MyModule1'], function() {}) da MyApplication.

Tuttavia, una volta eseguita MyLibrary tramite r.js, questo non sembra più possibile - non sembra essere un modo per fare riferimento direttamente ai moduli interni più direttamente?

Posso vedere dalla sorgente compilata/ottimizzata che esistono blocchi define() per ciascun modulo, tuttavia RequireJS all'interno della Mia Applicazione non sembra essere in grado di fare riferimento direttamente a questi.

È possibile, o sarà necessario raggruppare l'intera applicazione in un unico file perché funzioni.

Modifica: la fase di ottimizzazione RequireJS viene eseguita come framework Play e ho il controllo minimo sulla configurazione di build.

({appDir: "javascripts", 
[info]   baseUrl: ".", 
[info]   dir:"javascripts-min", mainConfigFile: "javascripts/build.js", modules:   [{name: "main"}]}) 
+0

puoi pubblicare la tua configurazione di build r.js e qualsiasi altro codice rilevante? – explunit

+0

I file di costruzione sono generati al volo dal framework che sto usando (Play 2.1), e non ce n'è troppo. Lo aggiungerò comunque. –

risposta

2

Per utilizzare i moduli dalla libreria, è necessario istruire RequireJS su come trovare questi moduli. In main.js è necessario avere qualcosa di simile:

require.config({ 
     // ... 
     paths: { 
      // ... 
      'MyLibraryBundleName': 'dist/MyLibraryFile', 
      // ... 
     }, 
     // ... 
     bundles: { 
      //... 
      'MyLibraryBundleName': ['MyLibrary/MyModule1', 'MyLibrary/MyModule2'], 
      //... 
     } 
    }); 

Quando MyApplication fa riferimento a un modulo come questo:

define(['MyLibrary/MyModule1'],function(){}) 

... come si parla, RequireJS cercheranno 'MyLibrary/myModule1 'e lo troverà nella sezione' bundles 'e successivamente controllerà la sezione' path 'per individuare il file effettivo' dist/MyLibraryFile 'che verrà caricato.

Problemi correlati