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 devfunction与我添加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'])