核心提示:首先,gulp的源码里没有任何一部分是定义pipe的。gulp的pipe方法是来自nodejs stream API的。gulp本身是由一系列vinyl模块组织起来的。pipe方法到底是什么呢?pip...
首先,gulp的源码里没有任何一部分是定义pipe的。
gulp的pipe方法是来自nodejs stream API的。
gulp本身是由一系列vinyl模块组织起来的。
pipe方法到底是什么呢?
pipe跟他字面意思一样只是一个管道
例如我有一堆文件
vars = gulp.src(["fileA","fileB","fileC"])
src方法实际上是'vinyl-fs'模块的方法,选择一系列文件并创建可读流(readableStream)。
返回的是由从这些文件而来的流(stream)
既然是Stream,自然少不了最常用的pipe的方法。
s.pipe(fn)
pipe方法传入方法的是一个function,这个function作用无非是接受上一个流(stream)的结果,并返回一个处理后流的结果(返回值应该是一个stream对象)。
注意的是这个函数只是一个包装,并不是会直接操作文件的。
例如这样构造一个Stream对象并且返回,然后再stream的方法里把把文件内容log出来
var stream = require('stream'); s.pipe(()=>{ var fileStream = new stream.Transform({objectMode: true}); fileStream._transform = function(file, unused, callback){ console.log(file.contents);//把传入的文件内容log出来 this.push(file);//注意的是这个file是也必须是vinyl对象 callback(); }; return fileStream; })
管道与Stream
也就是说pipe本身只是定义了管道的组织情况,管道本身的具体结构(Stream对象)
pipe方法只负责返回这个管道结构(Stream对象)
楼主想要窥探管道里的内容,就要创建一个Stream对象,在Stream对象接收结果的方法里把流里的内容log出来即可
Stream与File
注意的是gulp里的流的file必须是vinyl对象
var File = require("gulp-utils").File //或者 var File = require("vinyl") var myf = new File() myf.contents = new Buffer("haha")