2015-09-21 17 views
10

In passato ho usato un generatore yeoman per tutti i miei compiti di sviluppo. Di solito quando lavoro su un progetto lo userò con la bussola per compilare il mio scss, e quindi pacchettizzare e rompere il mio JS, ottimizzare le immagini, filtrare il mio codice e molte altre cose utili.Perché si dovrebbe usare un modulo bundler (webpack) su un task-runner (grunt)?

Recentemente ho visto una tendenza verso le persone a utilizzare webpack invece di plugin per grunt per molte di queste attività. Perchè è questo? Cosa c'è di meglio di un bundle di moduli a questo riguardo?

+0

preferenza personale. –

+5

Sembra esserci una strana tendenza nel mondo node.js/javascript per seguire le "best practice", e ogni volta che esce qualcosa di nuovo, un gruppo di sviluppatori/blogger lo chiama "best practice" e un gruppo di persone salta a bordo. –

+0

La discusione sembra chiusa per rispondere, mi dispiace per il messaggio disordinato. Per me il webpack non è una preferenza personale. Non uso perché webpack-dev-server o molti plugin sublimetext. anche se in alcuni casi può sostituire l'uso dei corridori di compiti, nel mio progetto attuale sto usando in congiunzione col gulp e loro insieme sono una squadra vincente. L'oro del webpack è il fatto che puoi pensare ai moduli e gestisce le sue dipendenze. – EricSonaron

risposta

8

Sono sicuro che gli altri hanno le loro ragioni, ma la ragione principale per cui ho migrato a webpack (più specificamente webpack-dev-server), è perché serves your bundle from memory (in contrapposizione a disco), e la sua Watcher recompile only the files you changed while reusing the rest from cache (in memoria). Ciò consente allo sviluppo di essere molto più veloce. Quello che voglio dire è che, mentre sto modificando attivamente il codice, posso ctrl + s in Sublime Text, nel momento in cui ho alt + tab su Chrome, è già in corso di ricostruzione. Avevo già un setup grunt + browserify + grunt-watch, e ci sono voluti almeno 5 secondi per ricostruire ogni volta che salgo (cioè dopo aver fatto un sacco di ottimizzazioni specializzate in build grunt). Detto questo, ho ancora integrato il webpack con il gulp, quindi ho ottenuto un task runner per il mio progetto.

MODIFICA 1: Voglio anche aggiungere che il vecchio grunt + LESS/SASS + browserify + uglify + setup di grunt-watch non ha scalato bene. Stavo lavorando su un grande progetto da zero. All'inizio andava bene, ma poi, man mano che il progetto cresceva, peggiorava ogni giorno. Alla fine è diventato incredibilmente frustrante aspettare che il grunt finisse di costruire ogni ctrl + s. È anche apparso evidente che stavo aspettando un mucchio di file non modificati.

Un'altra bella cosa è che il webpack consente di richiedere fogli di stile in .js, che stabilisce l'accoppiamento di file sorgente nello stesso modulo. Originariamente abbiamo stabilito le dipendenze del foglio di stile utilizzando l'importazione in file .less, ma i file di origine scollegati nello stesso modulo e stabilito un grafico di dipendenza separato. Ancora una volta tutti questi sono altamente supponenti, e questa è solo la mia opinione personale. Sono sicuro che gli altri la pensino diversamente.

EDIT 2: Bene, dopo alcune discussioni di seguito, permettetemi di offrire una risposta più concisa e meno convinta. Una cosa che il webpack fa davvero bene è che può guardare, leggere, pre-processare e aggiornare la cache e servire con una quantità minima di I/O e elaborazione dei file. Gulp pipe funziona molto bene, ma quando si tratta di fare un passo in bundling, finisce inevitabilmente per dover leggere tutti i file da una directory temporanea, compresi quelli invariati. Man mano che il progetto cresce, anche il tempo di attesa per questo passaggio aumenta. D'altra parte, webpack-dev-server mantiene tutto memorizzato nella cache, quindi la quantità di tempo di attesa durante lo sviluppo è ridotta al minimo. Tuttavia, per ottenere questo tipo di memorizzazione nella cache, il webpack dovrà coprire da orologio a server, quindi sarà necessario conoscere le configurazioni di pre-elaborazione. Una volta che hai configurato il webpack per farlo, potresti anche riutilizzare le stesse configurazioni per sputare build diverse dal server di sviluppo. Quindi siamo finiti in questa situazione. Detto questo, esattamente quali passaggi si desidera che il webpack faccia sia ancora all'altezza delle preferenze personali. Ad esempio, non eseguo l'elaborazione delle immagini o il lint nel mio server di sviluppo. In effetti, il mio passo con la lanugine è un obiettivo totalmente separato.

+0

Il problema di ridimensionamento che hai avuto con grunt mi sembra solo un compito di sorveglianza di configurazione scadente. Perché dovresti farlo ripetere di meno/sass se non hai cambiato css? Forse è solo una cosa grugnita? non ho avuto quel problema con il gulp. –

+0

@KevinB Questo è in realtà uno di quei "grattacapi di ottimizzazione specializzata in build grunt" di cui stavo parlando. In pratica, ho sintonizzato molto più finemente la costruzione per mantenere il tempo al minimo. Ma, tuttavia, stava peggiorando ogni giorno e inevitabilmente ridondante. La pipe di Gulp funziona alla grande con uglify ma è ancora necessario il package node.js/common.js per raggruppare tutte le fonti ugificate su una directory temporanea e scrivere su disco o integrare il webpack. Quindi la mia opinione è perché affrontare tutti questi problemi quando il webpack si occupa di tutto questo con poche righe di configurazione. – initialxy

+0

@KevinB Sono passato da grunt + watch + uglify + browserify + express setup a grulp + webpack-dev-server. In realtà non ho fatto un sorso + orologio + ... prima di impostare. Quindi sono curiosamente sulle tue intuizioni. Come si imposta la build di sviluppo in modo tale da ricostruire solo i file che sono stati modificati? Come ho detto prima, posso vedere come il grunt-watch funzionerà bene con uglify, Babel, LESS/SASS ecc., Ma quando si tratta della fase di confezionamento, non è necessario leggere di nuovo l'intero codice base per sputare un fascio? Googling non mi ha dato risposte soddisfacenti. – initialxy

Problemi correlati