2013-08-25 15 views
5

Uso l'ottimizzatore r.js per combinare i file js in base al profilo di creazione come suggerito in documentation. Ecco la mia accumulo config.js:Come escludere urlArgs da build utilizzando r.js

({ 
    baseUrl: ".", 
    paths: { 
     jquery: '//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min', 
    }, 
    name: "main", 
    out: "main-built.2013-07-30.js" 
}) 

Come si può vedere si basa su main.js di file, ecco un codice di esso:

requirejs.config({ 
    baseUrl: 'scripts', 
    urlArgs: "bust=" + (new Date()).getTime(), 
    paths: { 
     jquery: [ 
      '//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min', 
      'lib/jquery-1.9.1.min', 
     ], 
    }, 
}); 

require([ 
    'layout', 
    'cue', 
], function() { 

}); 

Se conservo urlArgs: "bust=" + (new Date()).getTime() in main.js tutti i file esterni (qui jquery che viene caricato da CDN) assomigliano a .../jquery.js?bust=1377412213

Quindi è PITA commentare fuori questa linea ogni volta che creo una build. Ho letto tutta la documentazione e cercato su Google una soluzione, ma tutto invano. Forse lo faccio male?

risposta

1

La seguente soluzione potrebbe funzionare nel tuo caso, dove si sta rinominando il file main.js nelle r.js costruire:

urlArgs: require.specified('main') ? "bust="+(new Date()).getTime() : null 

È possibile che questo frammento di controllerà per il modulo chiamato 'main', che corrisponderà nello sviluppo, ma non nella produzione, in cui il modulo è denominato 'main-built.2013-07-30'.

Ho provato in sviluppo e produzione e funziona! :-)

D') Funzione require.specified (: With requirejs is it possible to check if a module is defined without attempting to load it?

+1

Sì, questo funziona. Dopo 2 anni :) – dVaffection

2

In questo modo si arriva tardi alla festa, ma qui la soluzione che ho usato: aggiungi il parametro urlArgs alla configurazione con una chiamata successiva.

HTML:

<script src="js/libs/require.js"></script> 
<script src="js/config.js"></script> 
<script>require(['main-app']);</script> 

Config File:

requirejs.config({ 
    paths: {...}, 
    shim: {...} 
});  

// Apply the cache bust only for the browser. 
if (window) { 
    requirejs.config({ 
    urlArgs: REQUIRE_NOCACHE ? "bust="+(new Date()).getTime() : null 
    }); 
} 

L'ottimizzatore richiede solo la prima dichiarazione requirejs.config e ignora il codice successivo. La seconda dichiarazione requirejs.config si estende anziché sostituire il primo, pertanto urlArgs viene ancora applicato correttamente ai moduli nel browser. Spero possa aiutare.

+0

Qual è * * REQUIRE_NOCACHE? – dVaffection

+0

'REQUIRE_NOCACHE' è solo una variabile booleana globale che dichiaro nei miei ambienti di sviluppo. Quando esiste, si assicura che la cache venga eliminata ogni volta che la pagina viene aggiornata. – Jes

+0

Come organizzi i tuoi ambienti di sviluppo e di sviluppo? – dVaffection

Problemi correlati