欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

gulp pipe

发布时间:2023/12/18 编程问答 51 豆豆
生活随笔 收集整理的这篇文章主要介绍了 gulp pipe 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

首先,gulp的源码里没有任何一部分是定义pipe的。

gulp的pipe方法是来自nodejs stream API的。
gulp本身是由一系列vinyl模块组织起来的。

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的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。