gulpnode
gulp是一個nodejs的streaming構建工具,所謂的streaming大體意思就是把構建流程想成一個個連接的管道(pipe)。git
爲何要這樣作呢?github
要解釋緣由,就不得不提到unix。unix自己只提供了數量相對較少的命令,可是你能夠命令的組合完成很強大的功能。命令和命令之間的銜接一般就用的是pipe。npm
相似,使用gulp,你僅僅只須要記住5個命令。這5個命令就是gulp提供給咱們的一套streaming構建的架子,也就至關於提供了unix中的pipe功能。至於說pipe中每一個命令的功能,則可使用現有的plugin或者自定義完成。gulp
安裝gulpcurl
若是npm版本比較老,可能會遇到安裝gulp失敗的狀況工具
更新/安裝npm:測試
curl https://www.npmjs.org/install.sh | sudo shui
安裝npm:this
npm install -g gulp
npm install--save-dev gulp
安裝完成之後,能夠用gulp -v試一試是否正確
[20:29:16] CLI version 3.8.5
[20:29:16] Local version 3.8.5
一個最簡單的gulp腳本
gulpfile.js
---
var gulp = require('gulp')
gulp.task('default', function() {
console.log('this is the default task')
})
運行:gulp
[20:29:02] Starting 'default'...
this is the default task
[20:29:02] Finished 'default' after 74 μs
gulp和大多數的構建工具相似,都是由task組成的,上面的例子中,default是task名字,也表示是默認的task。也能夠用gulp default運行,執行的是同一task。
一個第二簡單的gulp腳本(src, pipe)
安裝jasmine插件
npm install --save-dev gulp-jasmine
gulpfile.js
---
var gulp = require('gulp');
var jasmine = require('gulp-jasmine');
gulp.task('default', function () {
return gulp.src('spec/google.spec.js')
.pipe(jasmine());
});
安裝superagent方便測試
spec/google.spec.js
---
var superagent = require('superagent')
describe ('google', function() {
it("should return the google homepage", function(done) {
superagent.get('http://www.google.com/')
.end(function(e, res) {
expect(e).toBe(null)
expect(res.status).toBe(200)
done();
})
})
})
運行測試
[21:01:07] Starting 'default'...
[21:01:07] Finished 'default' after 79 ms
.
Finished in 0.41 seconds
1 test, 2 assertions, 0 failures
gulp有比較多的插件,好比上面用到的gulp-jasmine就是其中的一個。
gulp.src('spec/google.spec.js')
.pipe(jasmine());
有意思的東西來了,什麼是src和pipe?
咱們先看一個unix命令:
cat gulpfile.js | wc -l
這是兩個獨立的命令,cat gulpfile.js用來獲取gulpfile.js的文件內容,wc -l用來統計文件中的行數,他們中間用「|」相連。把cat gulpfile.js的輸出做爲wc -l的輸入。這是再常見不過的unix命令
gulp中吸收了這樣的想法,上面gulp命令能夠想做:
'spec/google.spec.js' | jasmine()
這樣應該就很是好理解了吧。
你僅僅須要知道的5個gulp命令
gulp.task(name, fn)這個你應經見過了
gulp.run(tasks...)儘量多的並行運行多個task
gulp.watch(glob, fn)當glob內容發生改變時,執行fn
gulp.src(glob)返回一個可讀的stream
gulp.dest(glob)返回一個可寫的stream
知道這些之後,你再看https://github.com/gulpjs/gulp中的例子,就顯得容易了不少