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的作用和来源的更多相关文章
- gulp 批量添加类名 在一个任务中使用多个文件来源
1.首先安装环境 1.安装gulp: npm install gulp 2.安装gulp-clean-css npm install gulp-clean-css 3.安装gulp-css-wrap ...
- gulp 中的增量编译
最近花一点时间学了下 gulp,顺便学了下 sass,因为工作中并不需要用(我比较希望学习是需求驱动),所以一直拖到现在才学.突然觉得学习这类工具性价比很高,半天一天即可上手,技能树丰富了(尽管可能只 ...
- 如何在Gulp中提高Browserify的打包速度
使用Browserify打包js时如果项目变得越来越大,编译时间就会相应变得越来越长.使用官方的插件watchify是个比较有效的提高速度方案. 提速原理 watchify的用法和gulp的watch ...
- header中Content-Disposition的作用与使用方法
下载文件的时候会使用: Content-disposition 是 MIME 协议的扩展,MIME 协议指示 MIME 用户代理如何显示附加的文件.Content-disposition其实可以控制用 ...
- JavaScript中pipe实战
JavaScript中pipe原理 代码示例 const pipe = (...fns) => x => fns.reduce((y, f) => f(y), x); 原理 一行代码 ...
- web.xml中load-on-startup的作用
如下一段配置,熟悉DWR的再熟悉不过了:<servlet> <servlet-name>dwr-invoker</servlet-name> <ser ...
- C#中构造函数的作用
C#中构造函数的作用 共同点: 都是实例化对象,初始化数据的 默认构造是说所有的类都从祖先object那继承了空参的构造方法,你不写与写空参构造都存在,而有参数的构造一般是自己写的,写就有不写就没有, ...
- MySQL数据库中delimiter的作用概述
以下的文章主要是向大家描述的是MySQL数据库中delimiter的作用是什么?我们一般都认为这个命令和存储过程关系不大,到底是不是这样的呢?以下的文章将会给你相关的知识,望你会有所收获. 其实就是告 ...
- js中getBoundingClientRect的作用及兼容方案
js中getBoundingClientRect的作用及兼容方案 1.getBoundingClientRect的作用 getBoundingClientRect用于获取某个html元素相对于视窗的位 ...
随机推荐
- [译]CQRS介绍
以下内容均为看完原文后自己的理解.并非一字一句翻译,会尽量保持原文意思. 什么是 CQRS: CQRS 意思就是命令查询职责分离(Command Query Responsibility Segreg ...
- MySQL 安装mysql数据库
原地址: https://www.cnblogs.com/jamespan23/p/5953133.html https://www.cnblogs.com/gbwpyq/p/6104786.html ...
- 吴裕雄 21-MySQL 正则表达式
MySQL 正则表达式在前面的章节我们已经了解到MySQL可以通过 LIKE ...% 来进行模糊匹配.MySQL 同样也支持其他正则表达式的匹配, MySQL中使用 REGEXP 操作符来进行正则表 ...
- php图片转base64
/*读取问价家图片生澈哥哥js文件 */header("Access-Control-Allow-Origin: *");$i=0;$handle = opendir('./ima ...
- Linux下开启计划任务日志
crontab记录日志 修改rsyslog vim /etc/rsyslog.d/50-default.conf (我的是root用户) 搜索cron 把如下行之前的注释"#"去掉 ...
- echarts 树图
1 事件:事件绑定,事件命名统一挂载到require('echarts/config').EVENT(非模块化为echarts.config.EVENT)命名空间下,建议使用此命名空间作为事件名引用, ...
- Java 并发AQS
转载出处:http://www.cnblogs.com/waterystone/ 一.概述 谈到并发,不得不谈ReentrantLock:而谈到ReentrantLock,不得不谈AbstractQu ...
- day16 包的使用 json time 常用模块
复习 1.判断py文件的两种用途 提到判断__name__ == '__main__'时,会执行py文件, 直接输入main,在pycharm里按tab直接自动输入这条语句 2.解决模块相互导入的问题 ...
- jenkin 不必要的Execute shell执行失败,导致jenkins都失败的解决
问题:jenkins里配置了多个执行shell,且有后续的执行job任务.但其中一个Execute shell执行失败了导致后续的shell都不执行了 而这个失败的shell并不是一定要执行 解决 ...
- PHPActiveRecord 学习三
#事务处理 注意事务 数据库要用InnoDB引擎 $c1 = User::connection(); try { //开启事务 $c1->transaction(); //sql语句 $sql ...