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

Ben*_*ick 6 javascript node.js gulp gulp-filter

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

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

我正在尝试在wcui/app/js包含许多其他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']);
Run Code Online (Sandbox Code Playgroud)

现在正在运行gulp dev它与我添加过滤器之前所做的相同的事情,linting每个js文件.如何更改此选项以使其正确过滤?gulp示例的格式为'wcui/app/js/*.js',但是当我承认**glob时,我根本没有得到子目录.除此之外,我想我正在关注这封信的自述文件(对我的特定任务进行了更改).

Jér*_*ker 15

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

版本发布0.5.0大口过滤器介绍multimatch 0.3.0它配备了重大更改.

打破变革

使用否定!作为第一个模式不再匹配任何东西.

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

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

var filter = gulpFilter('!wcui/app/js/vendor');
Run Code Online (Sandbox Code Playgroud)

var filter = gulpFilter(['*', '!wcui/app/js/vendor']);
Run Code Online (Sandbox Code Playgroud)

你很高兴.


另外,正如MildlySerious的评论所指出的那样,你应该.pipe(filter.restore())而不是.pipe(filter.restore)