在上一篇文章我們對(duì) Stream 的特性及其接口進(jìn)行了介紹,gulp 之所以在性能上好于 grunt,主要是因?yàn)橛辛?nbsp;Stream 助力來(lái)做數(shù)據(jù)的傳輸和處理。
那么我們不難猜想出,在 gulp 的任務(wù)中,gulp.src 接口將匹配到的文件轉(zhuǎn)化為可讀(或 Duplex/Transform)流,通過(guò) .pipe 流經(jīng)各插件進(jìn)行處理,最終推送給 gulp.dest 所生成的可寫(或 Duplex/Transform)流并生成文件。
本文將追蹤 gulp(v4.0)的源碼,對(duì)上述猜想進(jìn)行驗(yàn)證。
為了分析源碼,我們打開(kāi) gulp 倉(cāng)庫(kù)下的入口文件 index.js,可以很直觀地發(fā)現(xiàn),幾個(gè)主要的 API 都是直接引用 vinyl-fs 模塊上暴露的接口的:
var util = require('util');var Undertaker = require('undertaker');var vfs = require('vinyl-fs');var watch = require('glob-watcher');//略...G