2012-11-13 11 views
5

Esiste una funzionalità per caricare file diversi in base all'ambiente di progetto corrente (sviluppo o produzione, ad esempio)? Intendo qualcosa, che mi aiuta a caricare in modo trasparente file minificati o completi. Ho letto sul caricamento di multiversion, ma il multiversioning significa che ho bisogno di specificare la versione del file.
Ad esempio, ho il file module.js con il mio modulo. In questo file ho bisogno di caricare jQuery:RequireJS: caricamento di file diversi in base all'ambiente

require(['jquery]); 

Ma ho minified e la versione completa di jQuery e voglio caricare file diversi. Sto pensando a qualcosa di simile in config:

require.config({ 
     paths: { 
      'jquery' : function(){ 
       if(MODE == 'DEV'){ 
        return 'jquery'; 
       }else{ 
        return 'jquery.min' 
       } 
      } 
     } 
    }); 

O, forse, qualcosa di simile.

risposta

1

Se qualcuno ancora voglia di sapere come fare:

require.config({ 
    paths: { 
     'jquery' : (function(){ 
      if(MODE == 'DEV'){ 
       return 'jquery'; 
      }else{ 
       return 'jquery.min' 
      } 
     })() 
    } 
}); 

Questa funzione è auto invocando la funzione anonima. Invoca immediatamente nel luogo della definizione.

2

Se si utilizza the r.js optimizer, questo processo può essere risolto per voi. Nella cartella scripts lascia tutti i moduli, librerie e altro codice non compresso per scopi di sviluppo. Mi capita spesso di avere qualcosa di simile

scripts/ 
    lib/ 
    modules/ 

Quando si è pronti per la distribuzione, creare un build.js e configurare le varie opzioni. Faccio un esempio di una configurazione simile ho usato:

({ 
    baseUrl: '../scripts', 
    dir: '../scripts.min', 

    paths: { 
     'jquery': 'lib/jquery' 
    }, 

    removeCombined: true, 

    optimize: 'uglify', 
    preserveLicenseComments: false, 
    uglify: { 
     max_line_length: 3500, 
     no_copyright: true 
    }, 

    modules: [ 
     { 
      name: 'module1' 
     }, 
     { 
      name: 'module2', 
      exclude: ['jquery'] 
     } 
    ] 
}) 

Maggiori dettagli su ciascuna di queste opzioni can be found in this example configuration ma voglio richiamare l'attenzione su dir e removeCombined

dir è, ovviamente, dove i vostri script finirà su. Tendo a creare una cartella adiacente ai miei script con il suffisso .min o qualcosa di simile. Poi, quando si è pronti ad andare in produzione, è sufficiente modificare il vostro bisogno di configurazione baseUrl a scripts.min

require.config({ 
    baseUrl: '/scripts.min' // Now the site will load scripts from the optimised folder 

    // Other options 
}) 

Per impostazione predefinita, r.js copierà tutti gli script sopra indipendentemente dal fatto che sono già stati combinati in un altro js file o no. L'impostazione di removeCombined a true assicurerà che la cartella scripts.min contenga solo i file necessari per la produzione.

Problemi correlati