2013-01-14 14 views
5

Ho un'applicazione completa che funziona con Typescript e RequireJs, funziona perfettamente. Ora ho scaricato WebEssentials e sta generando i file di script minificati. WebEssentials genera file * .min.js separati con lo stesso nome del file di script originale.Caricamento file min.js Generato da TypeScript con Require

Come posso dire a RequireJs di caricare i miei file minificati invece dei miei file di script originali?

Grazie in anticipo

risposta

8

È possibile utilizzare il percorso di configurazione per ignorare i percorsi del modulo. Si può anche ripiegare a file non minified:

requirejs.config({ 
    enforceDefine: true, 
    paths: { 
     jquery: [ 
      'lib/jquery.min', 
      'lib/jquery' 
     ] 
    } 
}); 

ci può essere un modo più generale di utilizzare i file minimo che io non conosco!

+4

Qual è il costo delle prestazioni di questo? Il tuo esempio favorisce la produzione, ma, solo per un esempio, dico che uso '['scriptfile', 'scriptfile.min']'. ''scriptfile'' è in dev ma solo'' scriptfile.min'' è in produzione. Quante volte RequireJS cerca ''scriptfile'' in produzione, una volta o su ogni requisito del modulo? Suppongo che ci sia un pezzetto marginale di lavoro extra semplicemente perché il valore della proprietà è una matrice invece di una stringa. – N13

+0

Nel mio test informale, verifica questi in ordine ed è abbastanza intelligente da capire che un 404 è un 404 (che significa non guardare di nuovo). C'è sicuramente un successo in termini di prestazioni anche se si è in fase di sviluppo ma si preferisce la produzione, o viceversa. – Scribblemacher

0

Non c'è alcuna magia a questo. Avete alcune opzioni se

  1. Utilizzare RequireJS optimizer per generare file min per voi. Molto configurabile.
  2. Utilizzare l'opzione --out compilatore per concatenare tutti i file in un unico e Minify che
  3. creare un file script/batch per copiare la vostra applicazione da qualche altra parte, rinominare tutti i file di .min.js .js e sovrascrivere il non-min Sono quelli. O qualche altro mix ma ottieni il succo
  4. Usa il paths config come ha detto Steve. OK per le piccole app, meno che ideale per le grandi.

Per prestazioni ottimali, è necessario esaminare l'ottimizzatore e determinare se l'approccio a script singolo è la decisione corretta oppure più librerie più piccole rappresentano un approccio migliore. Dubito che il caricamento di ogni file .min.js sia la soluzione ideale per te.

+0

Forse il parametro out è la soluzione migliore. Ho già provato e, anche se minimizzo e carico esplicitamente il file minificato nella mia pagina principale, ** Require ** caricherà comunque le versioni verbose o non minime dei miei script. In questo caso, utilizzando un file con tutti gli script, come posso dire a Require di interrompere il caricamento dei miei script, poiché tutto è già caricato? – mvbaffa

+0

A proposito il parametro out non funziona Ok. Nessuno script è stato generato nel parametro --out. – mvbaffa

+0

Se si utilizza AMD '--out' non funzionerà per voi. Dovrai invece utilizzare lo strumento di ottimizzazione requirejs. – ryan

9

È possibile creare una semplice versione personalizzata di richiesta che aggiungerà condizionalmente ".min.js" a tutte le richieste di file del modulo che in genere riceverebbero solo l'appendice ".js". Si consideri il seguente:

//Establish a new 'useMinified' boolean in your initial config. 
    require.config({ useMinified: true }); 

Quindi, modificare il file di libreria require.js e modificare la funzione 'nameToUrl' come di seguito:

//Join the path parts together, then figure out if baseUrl is needed. 
url = syms.join('/'); 

    //new statement 
var extension = config.useMinified ? '.min.js' : '.js'; 

    //customized statement 
url += (ext || (/^data\:|\?/.test(url) || skipExt ? '' : extension)); 

url = (url.charAt(0) === '/' || url.match(/^[\w\+\.\-]+:/) ? '' : config.baseUrl) + url; 
+3

Non riesco a pensare a un motivo per cui non è ancora implementato in requirejs !? – nljuba

Problemi correlati