Gulp per principianti
Gulp è uno strumento che ti aiuta in diversi compiti quando si tratta di sviluppo web. È spesso usato per fare compiti front-end come:
- Spegnere un server web
- Ricaricare il browser automaticamente ogni volta che un file viene salvato
- Utilizzare preprocessori come Sass o LESS
- Ottimizzare risorse come CSS, JavaScript e immagini
Nota importante! Questo articolo è stato scritto per Gulp 3.x, ma ora Gulp 4.x è uscito ed è raccomandato. Come ogni grande cambio di versione, le API hanno cambiamenti di rottura. Se installi Gulp 4 e provi a fare alcune delle cose in questo articolo, non funzioneranno. Faremo alcune note qui per ricordarvelo. Questo sembra un buon antipasto di Gulp 4.
Questa non è una lista completa delle cose che Gulp può fare. Se sei abbastanza pazzo, puoi anche costruire un generatore di siti statici con Gulp (l’ho fatto!). Quindi sì, Gulp è estremamente potente, ma dovrete imparare ad usare Gulp se volete creare i vostri processi di compilazione personalizzati.
Quindi è a questo che serve questo articolo. Ti aiuta a diventare così bravo con le basi di Gulp che puoi iniziare ad esplorare tutto il resto da solo.
Prima di tuffarci nel lavoro con Gulp, parliamo del perché potreste voler usare Gulp rispetto ad altri strumenti simili.
Perché Gulp?
Strumenti come Gulp sono spesso chiamati “strumenti di costruzione” perché sono strumenti per eseguire i compiti per costruire un sito web. I due strumenti di costruzione più popolari al momento sono Gulp e Grunt. (Chris ha un post su come iniziare con Grunt qui). Ma ce ne sono altri, naturalmente. Broccoli si concentra sulla compilazione delle risorse, uno dei compiti più comuni degli strumenti di compilazione.
Ci sono già più articoli che coprono la differenza tra Grunt e Gulp e perché si potrebbe usare uno piuttosto che un altro. Puoi controllare questo articolo, questo o questo se sei interessato a saperne di più. Brunch è simile nella sua focalizzazione sulle risorse, e raggruppa alcuni degli altri compiti più comuni come un server e un file watcher.
La differenza principale è come si configura un flusso di lavoro con loro. Le configurazioni di Gulp tendono ad essere molto più brevi e semplici rispetto a Grunt. Gulp tende anche ad essere più veloce.
Passiamo ora a scoprire come configurare un flusso di lavoro con Gulp.
Cosa stiamo impostando
Per la fine di questo articolo, avrete un flusso di lavoro che esegue i compiti che abbiamo delineato all’inizio di questo articolo:
- Fa girare un server web
- Compila Sass in CSS
- Ripristina il browser automaticamente ogni volta che si salva un file
- Ottimizza tutte le risorse (CSS, JS, font e immagini) per la produzione
Apprenderete anche come concatenare diversi compiti in semplici comandi che sono facili da capire ed eseguire.
Iniziamo installando Gulp sul tuo computer.
Installare Gulp
Devi avere Node.js (Node) installato sul tuo computer prima di poter installare Gulp.
Se non hai già Node installato, puoi ottenerlo scaricando il pacchetto di installazione dal sito di Node.
Quando hai finito di installare Node, puoi installare Gulp usando il seguente comando nella riga di comando:
$ sudo npm install gulp -g
Nota: Solo gli utenti Mac hanno bisogno della parola chiave sudo. (Vedi il primo commento di Pawel Grzybek se non vuoi usare sudo). E ricordate che il “$” nel codice qui sopra simboleggia solo il prompt dei comandi. Non fa effettivamente parte del comando che esegui.
Il comando npm install
che abbiamo usato qui è un comando che usa Node Package Manager (npm) per installare Gulp sul tuo computer.
Il flag -g
in questo comando dice a npm di installare Gulp globalmente sul tuo computer, il che ti permette di usare il comando gulp
ovunque sul tuo sistema.
Gli utenti Mac hanno bisogno della parola chiave extra sudo
nel comando perché hanno bisogno dei diritti di amministratore per installare Gulp globalmente.
Ora che avete installato Gulp, facciamo un progetto che usa Gulp.
Creare un progetto Gulp
Prima di tutto, creeremo una cartella chiamata project
che servirà come radice del nostro progetto mentre ci muoviamo in questo tutorial. Esegui il comando npm init
da quella cartella:
# ... from within our project folder$ npm init
Il comando npm init
crea un file package.json
per il tuo progetto che memorizza informazioni sul progetto, come le dipendenze usate nel progetto (Gulp è un esempio di dipendenza).
npm init
ti chiederà:
Una volta creato il file package.json
, possiamo installare Gulp nel progetto utilizzando il seguente comando:
$ npm install gulp --save-dev
Questa volta, stiamo installando Gulp in project
invece di installarlo globalmente, ecco perché ci sono alcune differenze nel comando.
Vedrai che la parola chiave sudo
non è richiesta perché non stiamo installando Gulp globalmente, quindi anche -g
non è necessario. Abbiamo aggiunto --save-dev
, che dice al computer di aggiungere gulp
come dipendenza dev in package.json
.
Se controlli la cartella del progetto quando il comando ha finito di essere eseguito, dovresti vedere che Gulp ha creato una cartella node_modules
. Dovreste anche vedere una cartella gulp
all’interno di node_modules
.
Siamo quasi pronti per iniziare a lavorare con Gulp. Prima di farlo, dobbiamo avere chiaro come useremo Gulp per il progetto, e parte di questo è decidere la struttura delle cartelle.
Determinazione della struttura delle cartelle
Gulp è abbastanza flessibile da lavorare con qualsiasi struttura di cartelle. Dovrete solo capire il suo funzionamento interno prima di modificarlo per il vostro progetto.
Per questo articolo, useremo la struttura di una webapp generica:
|- app/ |- css/ |- fonts/ |- images/ |- index.html |- js/ |- scss/ |- dist/ |- gulpfile.js |- node_modules/ |- package.json
In questa struttura, useremo la cartella app
per scopi di sviluppo, mentre la cartella dist
(come in “distribuzione”) è usata per contenere file ottimizzati per il sito di produzione.
Siccome app
è usata per scopi di sviluppo, tutto il nostro codice sarà messo in app
.
Dovremo tenere a mente questa struttura di cartelle quando lavoreremo alle nostre configurazioni di Gulp. Ora, iniziamo a creare il primo task di Gulp in gulpfile.js
, che memorizza tutte le configurazioni di Gulp.
Scrivere il tuo primo task di Gulp
Il primo passo per usare Gulp è require
nel gulpfile.
var gulp = require('gulp');
La dichiarazione require dice a Node di cercare nella cartella node_modules
un pacchetto chiamato gulp
. Una volta trovato il pacchetto, assegniamo il suo contenuto alla variabile gulp
.
Possiamo ora iniziare a scrivere un task gulp con questa variabile gulp
. La sintassi di base di un task gulp è:
gulp.task('task-name', function() { // Stuff here});
task-name
si riferisce al nome del task, che verrebbe usato ogni volta che si vuole eseguire un task in Gulp. Puoi anche eseguire lo stesso compito nella riga di comando scrivendo gulp task-name
.
Per testarlo, creiamo un task hello
che dice Hello Zell!
.
gulp.task('hello', function() { console.log('Hello Zell');});
Possiamo eseguire questo compito con gulp hello
nella riga di comando.
$ gulp hello
La linea di comando restituirà un log che dice Hello Zell!
.
I task di Gulp sono solitamente un po’ più complessi di questo. Di solito contiene due metodi Gulp aggiuntivi, più una varietà di plugin Gulp.
Ecco come potrebbe essere un vero task:
Come potete vedere, un vero task contiene due metodi Gulp aggiuntivi – gulp.src
e gulp.dest
.
gulp.src
dice al task di Gulp quali file usare per il task, mentre gulp.dest
dice a Gulp dove emettere i file una volta che il task è completato.
Provo a costruire un task reale in cui compiliamo i file Sass in file CSS.
Preelaborazione con Gulp
Possiamo compilare Sass in CSS in Gulp con l’aiuto di un plugin chiamato gulp-sass. Puoi installare gulp-sass nel tuo progetto usando il comando npm install
come abbiamo fatto per gulp
.
Vorremmo anche usare il flag --save-dev
per assicurarci che gulp-sass venga aggiunto a devDependencies
in package.json
.
$ npm install gulp-sass --save-dev
Dobbiamo require
gulp-sass dalla cartella node_modules
proprio come abbiamo fatto con gulp
prima di poter utilizzare il plugin.
var gulp = require('gulp');// Requires the gulp-sass pluginvar sass = require('gulp-sass');
Possiamo usare gulp-sass sostituendo aGulpPlugin()
con sass()
. Poiché il compito è quello di compilare Sass in CSS, chiamiamolo sass
.
gulp.task('sass', function(){ return gulp.src('source-files') .pipe(sass()) // Using gulp-sass .pipe(gulp.dest('destination'))});
Abbiamo bisogno di fornire al task sass
i file sorgente e una destinazione affinché il task funzioni, quindi creiamo un file styles.scss
nella cartella app/scss
. Questo file sarà aggiunto al task sass
in gulp.src
.
Vogliamo emettere l’eventuale file styles.css
nella cartella `app/css`, che sarebbe la destination
per gulp.dest
.
Vogliamo testare che il task sass
funzioni come vogliamo. Per farlo, possiamo aggiungere una funzione Sass dentro styles.scss
.
// styles.scss.testing { width: percentage(5/7);}
Se si esegue gulp sass
nella riga di comando, si dovrebbe ora essere in grado di vedere che un file styles.css
è stato creato in app/css
. Inoltre, ha il codice dove percentage(5/7)
è stato valutato in 71.42857%
.
/* styles.css */.testing { width: 71.42857%; }
Ecco come sappiamo che il compito sass
funziona!
A volte abbiamo bisogno della capacità di compilare più di un file .scss
in CSS contemporaneamente. Possiamo farlo con l’aiuto di Node globs.
Globbing in Node
I globs sono pattern di corrispondenza per i file che ti permettono di aggiungere più di un file in gulp.src
. È come le espressioni regolari, ma specificamente per i percorsi dei file.
Quando usi un glob, il computer controlla i nomi dei file e i percorsi per lo schema specificato. Se lo schema esiste, allora viene trovato un file.
La maggior parte dei flussi di lavoro con Gulp tende a richiedere solo 4 diversi pattern di globbing:
-
*.scss
: Il pattern*
è un carattere jolly che corrisponde a qualsiasi pattern nella directory corrente. In questo caso, stiamo facendo corrispondere qualsiasi file che termina con.scss
nella cartella principale (project
). -
**/*.scss
: Questa è una versione più estrema dello schema*
che corrisponde a qualsiasi file che termina con.scss
nella cartella principale e in qualsiasi directory figlia. -
!not-me.scss
: Il!
indica che Gulp dovrebbe escludere lo schema dalle sue corrispondenze, che è utile se si dovesse escludere un file da uno schema abbinato. In questo caso,not-me.scss
verrebbe escluso dal match. -
*.+(scss|sass)
: Il più+
e le parentesi()
permettono a Gulp di abbinare più pattern, con pattern diversi separati dal carattere pipe|
. In questo caso, Gulp abbinerà qualsiasi file che termina con.scss
o.sass
nella cartella principale.
Ogni altro file Sass che si trova dentro app/scss
verrebbe automaticamente incluso nel task sass
con questa modifica. Se aggiungete un file print.scss
nel progetto, vedrete che print.css
sarà generato in app/css
.
Siamo ora riusciti a compilare tutti i file Sass in file CSS con un solo comando. La domanda è: a cosa serve se dobbiamo eseguire manualmente gulp sass
ogni volta che vogliamo compilare Sass in CSS?
Per fortuna, possiamo dire a Gulp di eseguire automaticamente il task sass
ogni volta che un file viene salvato attraverso un processo chiamato “watching”.
Guardare i file Sass per le modifiche
Nota! Gulp Watch è una delle cose che è cambiata molto dalla 3.x alla 4.x. Vedi la documentazione.
Gulp ci fornisce un metodo watch
che controlla se un file è stato salvato. La sintassi per il metodo watch
è:
// Gulp watch syntaxgulp.watch('app/scss/**/*.scss', );
Più spesso però, vogliamo guardare più di un tipo di file alla volta. Per farlo, possiamo raggruppare più processi di osservazione in un compito watch
:
gulp.task('watch', function(){ gulp.watch('app/scss/**/*.scss', ); // Other watchers})
Se hai eseguito il comando gulp watch
in questo momento, vedrai che Gulp inizia a guardare immediatamente.
E che esegue automaticamente il task sass
ogni volta che si salva un file .scss
.
Facciamo un ulteriore passo avanti e facciamo in modo che Gulp ricarichi il browser ogni volta che salviamo un file .scss
con l’aiuto di Browser Sync.
Live-reloading with Browser Sync
Browser Sync aiuta a rendere lo sviluppo web più facile facendo girare un server web che ci aiuta a fare live-reloading facilmente. Ha anche altre caratteristiche, come la sincronizzazione delle azioni su più dispositivi.
Dobbiamo prima installare Browser Sync:
$ npm install browser-sync --save-dev
Avrai notato che non c’è il prefisso gulp-
quando installiamo Browser Sync. Questo perché Browser Sync funziona con Gulp, quindi non dobbiamo usare un plugin.
Per usare Browser Sync, dovremo require
Browser Sync.
var browserSync = require('browser-sync').create();
Dobbiamo creare un browserSync
task per abilitare Gulp a far girare un server usando Browser Sync. Dato che stiamo facendo girare un server, dobbiamo far sapere a Browser Sync dove dovrebbe essere la root del server. Nel nostro caso, è la cartella `app`:
gulp.task('browserSync', function() { browserSync.init({ server: { baseDir: 'app' }, })})
Dobbiamo anche cambiare leggermente il nostro task sass
in modo che Browser Sync possa iniettare nuovi stili CSS (aggiornare il CSS) nel browser ogni volta che il task sass
viene eseguito.
Abbiamo finito di configurare Browser Sync. Ora, dobbiamo eseguire entrambi i compiti watch
e browserSync
allo stesso tempo perché il live-reloading avvenga.
Sarebbe scomodo aprire due finestre della linea di comando ed eseguire gulp browserSync
e gulp watch
separatamente, quindi facciamo in modo che Gulp li esegua insieme dicendo al task watch
che browserSync
deve essere completato prima che watch
possa essere eseguito.
Lo possiamo fare aggiungendo un secondo argomento al task watch
. La sintassi è:
gulp.task('watch', , function (){ // ...})
E in questo caso stiamo aggiungendo il task browserSync.
gulp.task('watch', , function (){ gulp.watch('app/scss/**/*.scss', ); // Other watchers})
Vogliamo anche assicurarci che sass
venga eseguito prima di watch
in modo che il CSS sia già l’ultimo ogni volta che eseguiamo un comando Gulp.
gulp.task('watch', , function (){ gulp.watch('app/scss/**/*.scss', ); // Other watchers});
Ora, se si esegue gulp watch
nella linea di comando, Gulp dovrebbe avviare entrambi i compiti sass
e browserSync
contemporaneamente. Quando entrambi i compiti sono completati, watch
verrà eseguito.
Al tempo stesso, si aprirà anche una finestra del browser che punta a app/index.html
. Se cambiate il file styles.scss
, vedrete che il browser si ricarica automaticamente.
C’è un’altra cosa prima di finire questa sezione sul live-reloading. Dal momento che stiamo già controllando il ricaricamento dei file .scss
, perché non fare un passo avanti e ricaricare il browser se un qualsiasi file HTML o JavaScript viene salvato?
Possiamo farlo aggiungendo altri due processi di controllo e chiamando la funzione browserSync.reload
quando un file viene salvato:
Finora in questo tutorial ci siamo occupati di tre cose:
- Avviare un server web per lo sviluppo
- Utilizzare il preprocessore Sass
- Ricaricare il browser ogni volta che un file viene salvato
Copriremo la parte sull’ottimizzazione delle risorse nella prossima sezione. Inizieremo con l’ottimizzazione dei file CSS e JavaScript.
Ottimizzare i file CSS e JavaScript
Gli sviluppatori hanno due compiti da svolgere quando si cerca di ottimizzare i file CSS e JavaScript per la produzione: la minificazione e la concatenazione.
Un problema che gli sviluppatori affrontano quando automatizzano questo processo è che è difficile concatenare gli script nell’ordine corretto.
Abbiamo incluso 3 tag script in index.html
.
Questi script si trovano in due directory diverse. Sarà difficile concatenarli con plugin tradizionali come gulp-concatenate.
Fortunatamente, c’è un utile plugin di Gulp, gulp-useref che risolve questo problema.
Gulp-useref concatena qualsiasi numero di file CSS e JavaScript in un unico file cercando un commento che inizia con “<!-build:” e finisce con “<!-endbuild->”. La sua sintassi è:
<!-- build:<type> <path> -->... HTML Markup, list of script / link tags.<!-- endbuild -->
<type>
può essere js
, css
, o remove
. È meglio impostare type
sul tipo di file che si sta cercando di concatenare. Se imposti type
a remove
, Gulp rimuoverà l’intero blocco di build senza generare un file.
<path>
qui si riferisce al percorso di destinazione del file generato.
Vogliamo che il file JavaScript finale sia generato nella cartella js
, come main.min.js
. Quindi, il markup sarebbe:
Ora configuriamo il plugin gulp-useref nel gulpfile. Dovremo installare il plugin e richiederlo nel gulpfile.
$ npm install gulp-useref --save-dev
var useref = require('gulp-useref');
Impostare il task useref
è simile agli altri task che abbiamo fatto finora. Ecco il codice:
gulp.task('useref', function(){ return gulp.src('app/*.html') .pipe(useref()) .pipe(gulp.dest('dist'))});
Ora, se si esegue questo compito useref
, Gulp prenderà i 3 tag script e li concatenerà in dist/js/main.min.js
.
Il file però non è minificato al momento. Dovremo usare il plugin gulp-uglify per aiutare a minificare i file JavaScript. Abbiamo anche bisogno di un secondo plugin chiamato gulp-if per assicurarci di tentare di minificare solo i file JavaScript.
$ npm install gulp-uglify --save-dev
Gulp dovrebbe ora minificare automaticamente il file `main.min.js` ogni volta che si esegue il task useref
.
Una cosa bella che devo ancora rivelare con Gulp-useref è che cambia automaticamente tutti gli script all’interno di “<!-build:” e “<!-endbuild->” in un singolo file JavaScript che punta a `js/main.min.js`.
Meraviglioso, vero?
Possiamo usare lo stesso metodo per concatenare qualsiasi file CSS (se hai deciso di aggiungerne più di uno). Seguiremo lo stesso processo e aggiungeremo un commento build
.
Possiamo anche minificare il file CSS concatenato. Dobbiamo usare un pacchetto chiamato gulp-cssnano plugin per aiutarci con la minificazione.
$ npm install gulp-cssnano
Ora si otterrebbe un file CSS ottimizzato e un file JavaScript ottimizzato ogni volta che si esegue il useref
task.
Passiamo oltre e ottimizziamo le immagini.
Ottimizzazione delle immagini
Avrete probabilmente già indovinato; abbiamo bisogno di usare gulp-imagemin per aiutarci ad ottimizzare le immagini.
$ npm install gulp-imagemin --save-dev
var imagemin = require('gulp-imagemin');
Possiamo minificare png
, jpg
, gif
e anche svg
con l’aiuto di gulp-imagemin. Creiamo un compito images
per questo processo di ottimizzazione.
gulp.task('images', function(){ return gulp.src('app/images/**/*.+(png|jpg|gif|svg)') .pipe(imagemin()) .pipe(gulp.dest('dist/images'))});
Siccome diversi tipi di file possono essere ottimizzati in modo diverso, potresti voler aggiungere delle opzioni a imagemin
per personalizzare come ogni file viene ottimizzato.
Per esempio, puoi creare GIF interlacciate impostando il tasto opzione interlaced
su true
.
Se volete, potete anche giocare con altre opzioni.
Ottimizzare le immagini, tuttavia, è un processo estremamente lento che non vorreste ripetere se non necessario. Per farlo, possiamo usare il plugin gulp-cache.
$ npm install gulp-cache --save-dev
Abbiamo quasi finito il processo di ottimizzazione. C’è ancora una cartella che dobbiamo trasferire dalla directory `app` alla `dist`, la directory dei fonts. Facciamolo ora.
Copiare i font in Dist
Siccome i file dei font sono già ottimizzati, non c’è altro da fare. Tutto quello che dobbiamo fare è copiare i font in dist
.
Possiamo copiare i file con Gulp semplicemente specificando gulp.src
e gulp.dest
senza alcun plugin.
gulp.task('fonts', function() { return gulp.src('app/fonts/**/*') .pipe(gulp.dest('dist/fonts'))})
Ora Gulp copierà `fonts` da `app` a `dist` ogni volta che si esegue gulp fonts
.
Ora abbiamo 6 diversi compiti nel gulpfile, e ognuno di essi deve essere chiamato individualmente con la linea di comando, il che è piuttosto ingombrante, quindi vogliamo legare tutto insieme in un unico comando.
Prima di farlo però, vediamo come pulire automaticamente i file generati.
Pulire i file generati automaticamente
Siccome stiamo generando file automaticamente, vogliamo assicurarci che i file che non sono più utilizzati non rimangano da nessuna parte senza che noi lo sappiamo.
Questo processo è chiamato pulizia (o in termini più semplici, cancellazione di file).
Dovremo usare del per aiutarci nella pulizia.
npm install del --save-dev
var del = require('del');
La funzione del
prende un array di globi di nodi che le dicono quali cartelle eliminare.
Impostare il tutto con un task Gulp è quasi come il primo esempio di “ciao” che avevamo.
gulp.task('clean:dist', function() { return del.sync('dist');})
Ora Gulp cancellerà la cartella `dist` ogni volta che gulp clean:dist
viene eseguito.
Nota: Non dobbiamo preoccuparci di cancellare la cartella dist/images
perché gulp-cache ha già memorizzato le cache delle immagini sul tuo sistema locale.
Per cancellare le cache dal tuo sistema locale, puoi creare un task separato chiamato `cache:clear`
gulp.task(‘cache:clear’, function (callback) {
return cache.clearAll(callback)
})
Uff, che boccone. Ora combiniamo tutti i nostri compiti insieme!
Combinando i compiti di Gulp
Riassumiamo quello che abbiamo fatto. Finora abbiamo creato due serie distinte di compiti Gulp.
Il primo set è per un processo di sviluppo, dove abbiamo compilato Sass in CSS, osservato i cambiamenti e ricaricato il browser di conseguenza.
Il secondo set è per un processo di ottimizzazione, dove abbiamo preparato tutti i file per il sito di produzione. Abbiamo ottimizzato risorse come CSS, JavaScript e immagini in questo processo e copiato i font da app
a dist
.
Abbiamo già raggruppato la prima serie di compiti in un semplice flusso di lavoro con il comando gulp watch
:
gulp.task('watch', , function (){ // ... watchers})
Il secondo set consiste in compiti che dobbiamo eseguire per creare il sito web di produzione. Questo include clean:dist
, sass
, useref
, images
e fonts
.
Se seguissimo lo stesso ragionamento, potremmo creare un compito build
per combinare tutto insieme.
gulp.task('build', , function (){ console.log('Building files');})
Purtroppo, non saremmo in grado di scrivere il task build
in questo modo perché Gulp attiva tutti i task nel secondo argomento simultaneamente.
C’è la possibilità che useref
, images
, o anche fonts
vengano completati prima di clean
, il che significa che l’intera cartella `dist` venga cancellata.
Quindi, per assicurarci che le pulizie vengano completate prima del resto dei compiti, abbiamo bisogno di usare un plugin extra chiamato Run Sequence.
$ npm install run-sequence --save-dev
Ecco la sintassi di una sequenza di compiti con run sequence:
Quando task-name
viene chiamato, Gulp eseguirà prima task-one
. Quando task-one
finisce, Gulp avvierà automaticamente task-two
. Infine, quando task-two
è completo, Gulp eseguirà task-three
.
Run Sequence ti permette anche di eseguire compiti simultaneamente se li metti in un array:
gulp.task('task-name', function(callback) { runSequence('task-one', , 'task-three', callback);});
In questo caso, Gulp esegue prima task-one
. Quando task-one
è completato, Gulp esegue tutti i compiti nel secondo argomento simultaneamente. Tutti i compiti in questo secondo argomento devono essere completati prima che task-three
venga eseguito.
Perciò ora possiamo creare un compito che assicuri che clean:dist
venga eseguito per primo, seguito da tutti gli altri compiti:
gulp.task('build', function (callback) { runSequence('clean:dist', , callback )})
Per rendere le cose coerenti, possiamo anche costruire la stessa sequenza con il primo gruppo. Usiamo default
come nome del compito questa volta:
gulp.task('default', function (callback) { runSequence(, callback )})
Perché default
? Perché quando avete un compito chiamato default
, potete eseguirlo semplicemente digitando il comando gulp
, il che fa risparmiare qualche battuta di tasto.
Finalmente, ecco un repo github per tutto il lavoro che abbiamo fatto!
Concludendo
Siamo passati attraverso le basi assolute di Gulp e abbiamo creato un flusso di lavoro che è in grado di compilare Sass in CSS mentre guarda i file HTML e JS per i cambiamenti allo stesso tempo. Possiamo eseguire questo task con il comando gulp
nella linea di comando.
Abbiamo anche costruito un secondo task, build
, che crea una cartella dist
per il sito di produzione. Abbiamo compilato Sass in CSS, ottimizzato tutte le nostre risorse e copiato le cartelle necessarie nella cartella dist
. Per eseguire questo compito, dobbiamo solo digitare gulp build
nella riga di comando.
Infine, abbiamo un compito clean
che cancella dalla cartella dist
generata qualsiasi cache di immagini creata, permettendoci di rimuovere qualsiasi vecchio file che è stato inavvertitamente tenuto in dist
.
Finora abbiamo creato un flusso di lavoro robusto che è abbastanza capace per la maggior parte degli sviluppatori web. C’è molto di più su Gulp e sui flussi di lavoro che possiamo esplorare per rendere questo processo ancora migliore. Ecco alcune idee per voi:
Per lo sviluppo:
- Utilizzare Autoprefixer per scrivere codice CSS senza vendor
- Aggiungere Sourcemaps per facilitare il debug
- Creare Sprites con sprity
- Compilare solo i file che sono cambiati con gulp-changed
- Scrivere ES6 con Babel o Traceur
- Modulare file Javascript con Browserify, webpack, o jspm
- Modularizzare HTML con motori di template come Handlebars o Swig
- Suddividere il gulpfile in file più piccoli con require-dir
- Generare automaticamente uno script Modernizr con gulp-modernizr
Per ottimizzare:
- Rimuovere il CSS inutilizzato con unCSS
- Ottimizzare ulteriormente il CSS con CSSO
- Generare CSS in linea per le prestazioni con Critical
Oltre ai processi di sviluppo o di ottimizzazione, potete anche aggiungere scrivere test unitari JavaScript con gulp-jasmine e persino distribuire la vostra cartella dist
sul vostro server di produzione automaticamente con gulp-rync.
Come potete vedere, anche se il flusso di lavoro che abbiamo creato fa un bel po’ di cose, c’è molto di più che si può fare. Creare un flusso di lavoro che si adatti alle vostre esigenze può essere estremamente eccitante e soddisfacente, ma può essere molto da assimilare se siete alle prime armi.
C’è molto di più su Gulp che è impossibile coprire in questo post, o anche in una serie di post. Ecco perché ho scritto un libro sull’automazione del flusso di lavoro, e vi invito a prendere dieci capitoli gratuitamente se siete interessati a saperne di più 🙂
Leave a Reply