2016-04-28 2 views
10

Consideriamo abbiamo un webpack config come questo:Non ricostruzione fascio webpack se i file di ingresso non è cambiata

entry: { 
    app: './main.js', 
    lib: './vendor.js', 
} 

Il file vendor.js consiste solo di un gruppo di richiede di librerie da node_modules. Il 99% delle volte che costruisco il/i gruppo/i il pacchetto di produzione lib.js è esattamente lo stesso.

Posso in qualche modo dire webpack che se il file vendor.js non è cambiata (o preferibilmente qualche altra condizione personalizzato come controllare la data di modifica del lib.js e package.json di rilevare se mi fosse possibile avere nuove versioni di moduli in node_modules) I faccio non vuoi per ricostruire il pacchetto lib.js? Ci vuole una notevole quantità di tempo sul mio server CI a causa di trascrizioni dattiloscritti ecc.

risposta

2

Per quanto ne so, Webpack sa solo se un file sarà lo stesso una volta che lo ha già creato perché così tanti fattori possono cambiare il contenuto del file. La data di modifica di un file in realtà non fornisce informazioni sufficienti per determinare che non dovrebbe essere ricostruito in modo tale Io consiglierei contro di esso o probabilmente finirai per rompere le tue build ad un certo punto e lasciare le persone confuse.

Tuttavia, se avete fatto sentire il bisogno di fare questo anche se si potrebbe se si voleva rendere il vostro config Webpack dinamico e utilizzare fs.stat per leggere vendor.js e poi solo aggiungerlo come una voce se la sua cambiato. Qualcosa di grosso modo così:

var fs = require('fs'); 

var config = { 
    entry: { 
     app: './main.js' 
    } 
    ... 
}; 

var stats = fs.statSync('./vendor.js'); 
if (new Date(stats.mtime).getTime() > process.env.LAST_VENDOR_BUILD_TIMESTAMP) { 
    config.lib = './vendor.js'; 
    // Then save new Date().getTime() somewhere like a DB and 
    // pass it in as LAST_VENDOR_BUILD_TIMESTAMP on next build. 
} 

module.exports = config; 

Come si può vedere l'unico modo per risolvere il tuo problema è che ogni generazione ha bisogno di avere conoscenze su build precedenti per raggiungere questo obiettivo. Questo è indesiderato perché le tue build dovrebbero essere discrete e non preoccuparsi dei precedenti risultati di build.

In alternativa, dovresti provare anche ad escludere un po 'di node_modules dalla build se impiega molto tempo. Non ho ancora creato progetti dattiloscritto, ma escludo tutto il node_modules e le mie build vengono eseguite molto più velocemente. A parte questo, non dovresti preoccuparti che il tuo server CI sia un po 'lento, almeno sarà robusto.

Problemi correlati