gulp常用插件之gulp-filter使用
更多gulp常用插件使用请访问:gulp常用插件汇总
gulp-filter这是一款可以把stream里的文件根据一定的规则进行筛选过滤。
安装
一键安装不多解释
npm install --save-dev gulp-filter
使用
gulp.src
中传入匹配符匹配了很多文件,可以把这些文件pipe
给gulp-filter
做二次筛选。如:gulp.src('**/*.js').pipe($.filter(**/a/*.js))
,本来选中了所有子文件下的js文件,经过筛选后变成名为a的子文件夹下的js文件。那有人要问了,为什么不直接将需要的筛选传入gulp.src
,干嘛要多筛选一步呢?这里面有两种情况:
gulp.src
与$.filter
中间可能需要别的处理,比如我对所有文件做了操作1
以后,还需要筛选出一部分做操作2
。- 第二种情况就要谈到
gulp-filter
的另外一个特性:筛选之后还可以restore
回去。比如我对所有文件做了操作1
,筛选了一部分做操作2
,最后要把所有的文件都拷贝到最终的位置。
代码如下:
var filter = $.filter('**/a/*.js', { restore: true });
gulp.src('**/*.js')
.pipe(action1())
.pipe(filter)
.pipe(action2())
.pipe(filter.restore())
.pipe(gulp.dest('dist'))
可以看到,如果没有restore这个操作,那么拷贝到最终位置的文件将只包含被过滤出来的文件,这样一restore
,所有的文件都被拷贝了。
下面我们来看看到底要如何使用:
- 仅过滤
您可能只想过滤流内容:
const gulp = require('gulp');
const uglify = require('gulp-uglify');
const filter = require('gulp-filter');
exports.default = () => {
// Create filter instance inside task function
const f = filter(['**', '!*src/vendor']);
return gulp.src('src/**/*.js')
// 过滤文件的子集
.pipe(f)
// 通过插件运行它们
.pipe(uglify())
.pipe(gulp.dest('dist'));
};
- 恢复过滤文件
const gulp = require('gulp');
const uglify = require('gulp-uglify');
const filter = require('gulp-filter');
exports.default = () => {
// 定义任务函数
const f = filter(['**', '!*src/vendor'], {restore: true});
return gulp.src('src/**/*.js')
// 过滤文件的子集
.pipe(f)
// 通过插件运行它们
.pipe(uglify())
// 带回以前过滤的文件(可选)
.pipe(f.restore)
.pipe(gulp.dest('dist'));
};
- 多个过滤器
通过组合和还原不同的筛选器,您可以使用单个管道处理不同的文件集。
const gulp = require('gulp');
const less = require('gulp-less');
const concat = require('gulp-concat');
const filter = require('gulp-filter');
exports.default = () => {
const jsFilter = filter('**/*.js', {restore: true});
const lessFilter = filter('**/*.less', {restore: true});
return gulp.src('assets/**')
.pipe(jsFilter)
.pipe(concat('bundle.js'))
.pipe(jsFilter.restore)
.pipe(lessFilter)
.pipe(less())
.pipe(lessFilter.restore)
.pipe(gulp.dest('out/'));
};
- 还原为文件源
您可以将过滤的文件还原到其他位置,并将其用作文件的独立源(ReadableStream)。将passthrough
选项设置为false
允许您这样做。
const gulp = require('gulp');
const uglify = require('gulp-uglify');
const filter = require('gulp-filter');
exports.default = () => {
const f = filter(['**', '!*src/vendor'], {restore: true, passthrough: false});
const stream = gulp.src('src/**/*.js')
// 过滤文件的子集
.pipe(f)
// 通过插件运行它们
.pipe(uglify())
.pipe(gulp.dest('dist'));
// 将过滤后的文件用作gulp文件源
f.restore.pipe(gulp.dest('vendor-dist'));
return stream;
};
API
filter(pattern, options)
返回具有.restore
属性的转换流
。
pattern
类型:string
|string[]
|Function
接受具有通过multimatch运行的glob模式的字符串/数组。
如果提供函数,您将获得一个vinyl文件对象作为第一个参数,并且期望返回一个布尔值是否包含文件:
filter(file => /unicorns/.test(file.path));
options
类型:object
接受multimatch
注意:设置
dot: true
是否需要匹配带点号的文件,例如.gitignore
。
restore
类型:boolean
默认值:false
恢复过滤的文件。passthrough
类型:boolean
默认值:true
设置为时true
,过滤后的文件将以还原stream.PassThrough
;否则,设置为时false
,过滤后的文件将以还原stram.Readable
。
当流为时stream.Readable
,它本身会结束,但是当为时stream.PassThrough
,您有责任结束流。
gulp常用插件之gulp-filter使用的更多相关文章
- 精通gulp常用插件
本文主要展示的是gulp常用插件的使用方法和用途,通过对插件的熟练运用达到精通gulp.不定期更新.可以到github上面下载DEMO. github地址:lin-xin/gulp-plugins 匹 ...
- gulp常用插件之gulp-rev-rewrite使用
更多gulp常用插件使用请访问:gulp常用插件汇总 gulp-rev-rewrite这是一款重写对由gulp-rev修订的资产的引用. 更多使用文档请点击访问gulp-rev-rewrite工具官网 ...
- gulp常用插件之http-proxy-middleware使用
更多gulp常用插件使用请访问:gulp常用插件汇总 http-proxy-middleware这是一个用于后台将请求转发给其它服务器.其实这并不是转给gulp使用的,在其它构建工具也可以用. 更多使 ...
- node和gulp实现前端工程自动化(附:gulp常用插件)
/** * 1. LESS编译 压缩 合并 * 2. JS合并 压缩 混淆 * 3. img复制 * 4. html压缩 */ // 在gulpfile中先载入gulp包,因为这个包提供了一些APIv ...
- gulp常用插件之gulp-eslint使用
更多gulp常用插件使用请访问:gulp常用插件汇总 ** gulp-eslint**这是一个用于识别和报告在ECMAScript/JavaScript代码中找到的模式的Gulp插件.. 更多使用文档 ...
- gulp常用插件之gulp-babel使用
更多gulp常用插件使用请访问:gulp常用插件汇总 gulp-babel这是Babel的Gulp插件. 此自述文件适用于gulp-babel v8 + Babel v7检查7.x分支以了解使用Bab ...
- gulp常用插件之gulp-postcss使用
更多gulp常用插件使用请访问:gulp常用插件汇总 ** gulp-postcss**这是一款通过多个插件通过管道传递CSS,但是仅解析一次CSS. 更多使用文档请点击访问gulp-postcss工 ...
- gulp常用插件之cssnano使用
更多gulp常用插件使用请访问:gulp常用插件汇总 cssnano这是一款将你的 CSS 文件做 多方面的的优化,以确保最终生成的文件 对生产环境来说体积是最小的插件. 更多使用文档请点击访问cha ...
- gulp常用插件之pump使用
更多gulp常用插件使用请访问:gulp常用插件汇总 pump这是一款小型节点模块,可将流连接在一起并在其中一个关闭时将其全部销毁. 使用标准source.pipe(dest)源时,如果dest发出关 ...
随机推荐
- 《Head First Java(第二版)》中文版 分享下载
书籍信息 书名:<Head First Java(第二版)>中文版 作者: Kathy Sierra,Bert Bates 著 / 杨尊一 编译 张然等 改编 豆瓣评分:8.7分 内容简介 ...
- 云服务器InfluxDB & Chronograf配置
环境: 阿里云服务器 Ubuntu 18.04.3 LTS InfluxDB 1.7.10 (截至2020.2.20最新版) chonograf 1.8.0 (2020.2.19推出) 配置建议: 不 ...
- Python3(五) 包、模块、函数与变量作用域
一.Python项目的组织结构 最顶级的组织结构:包(文件夹) 第二个层级:模块(文件) 第三个层级:类 第四个层级:函数.变量(不属于组织结构,是类本身的特性) 二.Python包与模块的名字 1. ...
- 《自拍教程17》Python调用命令
他山之石 何为他山之石,就是借助外界工具,来实现自己想要的功能. 命令行界面软件, 即各种命令,我们也叫命令行工具, 此类工具也是测试人员或者开发人员常用的工具的一种. 测试人员可以借助这类工具,快速 ...
- ts的特殊数据类型
四. Ts数据类型 tuple(元组类型):可以给数组指定位置存指定类型数据 例:let arr:[number, string] = [123, ‘123’]; enum(枚举):将数字转化为标识符 ...
- centos7.5优化系统脚本(虚拟机下)
#!/usr/bin/bash #安装常用软件,首先必须自行调整好网卡配置文件,保证可以上网,否则,下列优化会失败 yum -y install wget vim lrzsz bash-complet ...
- 11种常用css样式之border学习
边框border通常简写为"border:1px solid red;"但其实一个完整的border边框其实是由1.border-width/*边框宽度*/,2.border-st ...
- Python+PyQT5的子线程更新UI界面的实例《新手必学》
今天小编就为大家分享一篇Python+PyQT5的子线程更新UI界面的实例,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧子线程里是不能更新UI界面的,在移动端方面.Android的U ...
- Oracle列转行 参数动态传入iBatis使用示例
Oracle行转列 参数动态传入iBatis使用示例 最近做了一个需求,需要获取工作流数据的各个节点的渠道数量信息,各渠道的费用信息~ 之前的需求是只需要获取渠道数据,所以做了渠道兼容,每个渠道数量的 ...
- 关于在Spring项目中使用thymeleaf报Exception parsing document错误
今天在使用SpringBoot的过程中,SpringBoot版本为1.5.18.RELEASE,访问thymeleaf引擎的html页面报错Exception parsing document: 这是 ...