2016-06-27 17 views
6

Ho la seguente tipo di configurazione che crea bundle:Webpack 2 - è una cattiva pratica usare il pacchetto "fornitori"?

{ 
    entry: { 
    main: 'src/main.js', 
    vendor: [ 'lodash', 'react' ] 
    }, 
    plugins: [ 
    new webpack.optimize.CommonsChunkPlugin({ 
     name: 'vendor', 
     minChunks: Infinity, 
    }) 
    ] 
} 

Come si può vedere la mia intenzione è quella di dividere i miei moduli vendor in fasci separati. Funziona come previsto, tuttavia ho notato che in questo caso non sembra che si verifichino fenomeni di scuotimento degli alberi. Quando utilizzo questi fornitori, l'intero modulo verrà incluso nei bundle dei fornitori anche se la mia fonte non li sta utilizzando.

Se non utilizzo l'approccio del fornitore, la dimensione totale del pacco è significativamente inferiore.

È questo comportamento previsto? E se è così, allora considera una cattiva pratica usare questa tecnica nel caso volessi approfittare dello scuotimento degli alberi?

+0

Questo potrebbe essere un bug. Probabilmente ne vale la pena [aprire un bug report] (https://github.com/webpack/webpack/issues/new) per sapere con certezza. –

+0

incontrano gli stessi problemi. dopo aver usato il '' 'CommonsChunkPlugin''' per dividere il bundle del fornitore, il tremolio dell'albero non funziona più. –

risposta

0

Potrei sbagliarmi, dal momento che è una specie di "no due build sono lo stesso" tipo di cosa, ma abbiamo notato un problema simile quando stavamo usando il plugin chunk del comune.

Credo che l'aumento delle dimensioni e l'apparente mancanza di scuotimento degli alberi sia dovuto al fatto che alcuni pacchetti possono essere inclusi sia nel punto di ingresso principale che in quello del fornitore, ad esempio molti di questi piccoli pacchetti di utilità comuni. Con un punto di ingresso, Webpack li dedurrà, ma non saprà che le cose richieste dalla voce principale sono già richieste dalla voce del venditore a meno che non le aggiungiate specificamente.

La nostra soluzione, in una build simile alla tua, era semplicemente non utilizzare il plug-in del fornitore. La build richiede un po 'più di tempo, ma il risultato è più piccolo. Credo che il plug-in di componenti comuni sia progettato principalmente per i casi in cui è possibile avere diversi punti di accesso.