gulp-filter没有正确过滤掉排除的文件

时间:2014-06-16 02:11:00

标签: javascript node.js gulp gulp-filter

我正在尝试使用gulpjs代替grunt进行项目。我在代码上运行jsHint时尝试使用gulp过滤器来忽略供应商库。我的代码是基于自述文件的代码,但文件尚未过滤。

我正在运行节点0.10.26,gulp 3.8.0和gulp filter 0.4.1

我试图在包含许多其他JS文件目录的目录wcui/app/js上运行jshint,总共大约120个js文件。我想只排除供应商目录。

我的代码如下所示:

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,它在添加过滤器之前做了同样的事情,linting每个js文件。如何更改此选项以使其正确过滤? gulp示例的格式为'wcui / app / js / * .js'但是当我承认** glob时,我根本就没有得到子目录。除此之外,我想我跟随着自述文件的自述文件(对我的特定任务进行了更改)。

2 个答案:

答案 0 :(得分:15)

对于拥有更新版gulp-filter的读者(撰写时发布的版本是1.0.0)

0.5.0版本gulp-filter的版本multimatch 0.3.0引入了{{3}},其中发生了重大变化。

  

突破变化

     

使用否定!作为第一个模式不再匹配任何内容。

     

解决方法:['*', '!cake']

基本上,这意味着你需要更换

var filter = gulpFilter('!wcui/app/js/vendor');

var filter = gulpFilter(['*', '!wcui/app/js/vendor']);

你很高兴。


此外,正如 MildlySerious 的评论中所述,您应该.pipe(filter.restore())代替.pipe(filter.restore)

答案 1 :(得分:0)

使用此gulpFilter(['*', '!app/vendor'])

之类的过滤器