要學習gulp,首先是瞭解what is gulp。 javascript
gulp是前端開發過程當中對代碼進行構建的工具,是自動化項目的構建利器;它不只能對網站資源進行優化,並且在開發過程當中不少重複的任務可以使用正確的工具自動完成;使用它,咱們不只能夠很愉快的編寫代碼,並且大大提升咱們的工做效率。它是基於Nodejs的自動任務運行器, 它能自動化地完成 javascript/coffee/sass/less/html/image/css 等文件的的測試、檢查、合併、壓縮、格式化、瀏覽器自動刷新、部署文件生成,並監聽文件在改動後重復指定的這些步驟。在實現上,她借鑑了Unix操做系統的管道(pipe)思想,前一級的輸出,直接變成後一級的輸入,使得在操做上很是簡單。css
我嘗試翻譯一下這個幻燈片中的內容。 html
首先,咱們要把咱們的項目想象成許多水管,裏面流動着文件。而不是想象成一個裝滿貨物的貨車。同時,想要成爲一名編程開發人員,瞭解流控制是一個必要條件,而理解新式流控制技術可以讓你更加高效。前端
接下來,讓咱們想象一個畫面:從某個文件系統中讀取文件,通過一系列的修改後再提交到文件系統。
若是你的腦海中浮現的畫面是:java
那你多是一個grunt使用者。
事實上,理想的流程應該是下面這樣: node
也就是說,咱們並不須要修改一次就提交一次。應該在屢次修改後一次性提交到文件系統。git
在gulp以前,人們使用着grunt,它有不少強大的插件,但熟悉它的朋友可能會遇到以下的問題:github
gulp的理念與grunt相反,它試圖讓咱們的項目構建系統更加自由,約束更少。也就是說,這個構建系統應該只控制文件,其餘的事交給別的工具來處理。 npm
下面是gulp和grunt的區別:編程
所以,gulp提供了文件流和一個基礎的任務系統,而你要學習gulp,只須要理解5個方法:
好了,你已是一個gulp專家了(滑稽臉)。
瞭解了gulp的基本概念,以及能夠用gulp解決的問題後,讓咱們來實際體驗一次gulp。
新建一個demo文件夾,並執行
npm init
初始化項目,而後安裝gulp
npm install gulp -g
最後,新建gulpfile.js。
在gulpfile.js中,輸入以下代碼:
var gulp = require("gulp"); //壓縮js、css文件 var uglify = require("gulp-uglify"); var cleanCss = require('gulp-clean-css'); //自定義script任務,處理js文件壓縮 //pipe()是node.js的stream中的方法 //參數是一個function,這個function做用是接受上一個流(stream)的結果,並返回一個處理後流的結果 gulp.task('script', function () { gulp.src('js/*.js') .pipe(uglify()) .pipe(gulp.dest('dist/js')); }); //自定義css任務,處理css文件壓縮 gulp.task('css', function () { gulp.src('css/*.css') .pipe(cleanCss()) .pipe(gulp.dest('dist/css')); });
以後,咱們要新建兩個文件夾:js和css,其中分別新建index.js和index.css兩個文件。最後,在命令行中輸入
gulp css gulp script
gulp就會執行任務,自動新建dist文件夾,將壓縮後的文件放入該文件夾。
若是要在修改代碼後自動更新,使用gulp.watch方法:
gulp.task('modify', function () { gulp.watch('js/*.js', ['script']); gulp.watch('css/*.css', ['css']); })
命令行輸入
gulp modify
以後修改css文件,命令行會顯示
[13:44:41] Starting 'modify'... [13:44:41] Finished 'modify' after 14 ms [13:44:48] Starting 'css'... [13:44:48] Finished 'css' after 15 ms
最後文件目錄以下:
gulp功能強大彷佛都是由於其豐富的插件生態,因此最後打算介紹一下主流使用的插件:
插件名 | 做用 |
---|---|
gulp-sass | 編譯sass成css文件 |
gulp-imagemin | 壓縮 png/jpg/git/svg 格式圖片文件 |
gulp-gzip | gzip插件 |
gulp-util | 集合了許多 Gulp 中經常使用的小工具,例如 log() 、 colors 等等 |
gulp-spriter | 自動合併雪碧圖 |
gulp-watch | 這個插件能夠自定義觸發事件,並且經過插件提供回調機制配合你們熟悉的 console 能夠很方便的觀察到構建流程。 |
gulp-colors | 設置 CLI 輸出文字的顏色 |
gulp-rev | 將 MD5 指紋寫入文件名 |
gulp-sourcemaps | 生成 Source Map |
gulp-uglify | 壓縮js文件 |
gulp-clean-css | 壓縮css文件 |
gulp-concat | 合併 JS 或 CSS 文件 |