您现在的位置:首页 >> 前端 >> 内容

gulp的pipe方法是什么?该如何使用?

时间:2017/10/10 14:18:00 点击:

  核心提示:首先,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")

Tags:GU UL LP P的 
作者:网络 来源:MrFano的博客