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