2014-06-16 7 views
5

Ich experimentiere mit gulpjs anstelle von grunt für ein Projekt. Ich versuche, den Gulp-Filter zu verwenden, um Herstellerbibliotheken zu ignorieren, wenn ich jsHint für meinen Code verwende. Ich habe meinen Code vom Code aus dem Beispiel des Readme abgeleitet, aber die Dateien wurden nicht gefiltert.gulp-filter filtert die ausgeschlossenen Dateien nicht korrekt aus

Ich bin mit Knoten 0.10.26, schluck 3.8.0 und schluck Filter 0.4.1

Ich versuche jshint auf ein Verzeichnis wcui/app/js, dass viele andere Verzeichnisse von JS-Dateien enthält, mit etwa zu laufen 120 js Dateien insgesamt. Ich möchte nur das Lieferantenverzeichnis ausschließen.

Mein Code sieht wie folgt aus:

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']); 

jetzt ausgeführt gulp dev macht das Gleiche, es tat, bevor ich den Filter hinzugefügt, jede Datei js Fusseln. Wie kann ich dies ändern, damit es richtig gefiltert wird? Das Schluckbeispiel hatte die src im Format 'wcui/app/js/*. Js', aber wenn ich den ** Glob gebe, bekomme ich keine Unterverzeichnisse. Ansonsten denke ich, dass ich die Readme genau befolge (mit Änderungen für meine spezielle Aufgabe).

+0

Sollte nicht '.pipe (filter.restore)' 'sein .pipe (filter.restore ()) '? – MildlySerious

+0

Als Antwort auf @MildlySerious - und auf Ben, der sich aufgrund seiner Empfehlung geändert hat - lautet die Antwort nein. Es sollte ".pipe (filter.restore)" sein - sonst wird ein Fehler ausgegeben. – user1167442

Antwort

14

Für Leser, die eine mehr up-to-date-Version von schluck-Filter (Freigabe zum Zeitpunkt des Schreibens ist 1.0.0) haben

Die Freisetzung von Version 0.5.0 von gulp-filter eingeführt multimatch 0.3.0 die mit einer Bruchänderung kommen.

Änderung Brechen

eine negate ! Verwendung als das erste Muster nicht mehr alles passt.

Umgehung: ['*', '!cake']

Im Grunde, was es bedeutet, ist, dass Sie

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

mit

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

und Sie sind gut zu gehen ersetzen müssen.


Auch, wie im Kommentar von MildlySerious erwähnt, sollten Sie .pipe(filter.restore()) haben statt .pipe(filter.restore)

+0

Was für mich funktionierte, war die Verwendung von doppelten Sternchen: '['**', '! Cake']' für Dateien, die sich in Unterverzeichnissen befinden. –

0

Filter verwenden wie dies gulpFilter(['*', '!app/vendor'])