gulp-filter没有正确过滤排除的文件
我正在尝试使用gulpjs而不是grunt作为项目。 我试图在我的代码上运行jsHint时使用gulpfilter忽略供应商库。 我已经从自述文件示例中的代码中取出了代码,但文件没有被过滤。
我正在运行节点0.10.26,吞咽3.8.0和吞咽过滤0.4.1
我试图运行jshint目录wcui/app/js
,其中包含许多其他的JS文件目录,总共约120个js文件。 我只想排除vendor目录。
我的代码如下所示:
var gulp = require('gulp'); var gulpFilter = require('gulp-filter'); var jshint = require('gulp-jshint'); var srcs = { scripts: ['wcui/app/js/**/*.js'], styles: ['wcui/app/css/**/*.less','wcui/app/css/**/*.css'] }; var dests = { scripts: 'wcui/static/js/', styles: 'wcui/static/css/' }; gulp.task('scripts', function() { var filter = gulpFilter('!wcui/app/js/vendor'); return gulp.src(srcs.scripts) .pipe(filter) .pipe(jshint()) .pipe(jshint.reporter('jshint-stylish')) .pipe(filter.restore) .pipe(gulp.dest(dests.scripts)); }); gulp.task('styles', function() { return gulp.src(srcs.styles) .pipe(gulp.dest(dests.styles)); }); gulp.task('dev',['scripts','styles']);
现在运行gulp dev
function与我添加filter之前做的是一样的,每一个js文件都有linting的function。 我怎样才能改变它,使其过滤正确? gulp示例的格式为“wcui / app / js / *。js”,但是当我承认**
glob时,我根本没有得到子目录。 除此之外,我认为我正在跟随自述文件(改变了我的特定任务)。
对于拥有更新的gulp-filter版本的读者(本文发布时为1.0.0)
gulp-filter版本0.5.0的发布引入了multimatch 0.3.0 ,这是一个突破性的改变。
打破变化
使用否定
!
因为第一种模式不再匹配任何东西。解决方法:
['*', '!cake']
基本上,这意味着你需要更换
var filter = gulpFilter('!wcui/app/js/vendor');
同
var filter = gulpFilter(['*', '!wcui/app/js/vendor']);
你很好走。
另外,正如在MildlySerious的评论中指出的那样 ,你应该有.pipe(filter.restore())
而不是.pipe(filter.restore)
像这样使用filtergulpFilter(['*', '!app/vendor'])