• gulp中pipe的作用和来源


    gulp的pipe方法是来自nodejs stream API的,并不是gulp本身源码所定义的。

    一、pipe方法的作用

    pipe跟他字面意思一样只是一个管道

    例如我有一堆文件

    var s = gulp.src(["fileA","fileB","fileC"])

    src方法实际上是'vinyl-fs'模块的方法,选择一系列文件并创建可读流(readableStream)。

    返回的是由从这些文件而来的流(stream)

    既然是Stream,自然少不了最常用的pipe的方法。

    s.pipe(fn)

    pipe方法传入方法的是一个function,这个function作用无非是接受上一个流(stream)的结果,并返回一个处理后流的结果(返回值应该是一个stream对象)。
    注意的是这个函数只是一个包装,并不是会直接操作文件的。

    这里面的思想跟可以阅读参考资料
    http://www.zhangxinxu.com/wordpress/2013/02/js-currying/
    http://www.cnblogs.com/kunhu/p/3608109.html

    例如这样构造一个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")

     参考资料:gulp的源码中哪部分是定义.pipe()的?

  • 相关阅读:
    svn进行Update操作失败 提示lock
    strust2自定义拦截器
    nginx相关特性及使用
    在linux服务器上部署springboot项目,并用nginx映射域名
    centos7 安装redis-6.0.6
    centos 7安装mysql 8教程
    centos7 设置系统时间
    centos7 fastdfs安装
    过滤器相关
    FastDFS相关
  • 原文地址:https://www.cnblogs.com/knyel/p/7827499.html
Copyright © 2020-2023  润新知