2014-06-16 20 views
5

Sto sperimentando l'utilizzo di gulpjs anziché di grunt per un progetto. Sto tentando di utilizzare il filtro gulp per ignorare le librerie dei fornitori durante l'esecuzione di jsHint sul mio codice. Ho basato il mio codice fuori dal codice dell'esempio del readme, ma i file non sono stati filtrati.gulp-filter che non filtra correttamente i file esclusi

Io corro nodo 0.10.26, gulp 3.8.0, e il filtro gulp 0.4.1

Sto cercando di eseguire jshint su una directory wcui/app/js che contiene molte altre directory di file JS, con circa 120 file js totali. Voglio escludere solo la directory del fornitore.

Il mio codice è simile al seguente:

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

In questo momento l'esecuzione gulp dev fa la stessa cosa ha fatto prima ho aggiunto il filtro, rilascio di fibre ogni file js. Come posso cambiarlo per farlo filtrare correttamente? L'esempio di gulp aveva src nel formato 'wcui/app/js/*. Js', ma quando ammetto il ** glob, non ottengo affatto le sottodirectory. Oltre a questo, penso di seguire il readme alla lettera (con modifiche per il mio particolare compito).

+0

Non dovrebbe '.pipe (filter.restore)' 'essere .pipe (filter.restore ()) '? – MildlySerious

+0

In risposta a @MildlySerious - e a Ben che ha cambiato in base alla sua raccomandazione - la risposta è no. Dovrebbe essere '.pipe (filter.restore)' - genera un errore altrimenti. – user1167442

risposta

14

Per i lettori che hanno una versione più up-to-date di gulp-filtro (rilascio al momento della scrittura è 1.0.0)

Il rilascio di la versione 0.5.0 di gulp-filter ha introdotto multimatch 0.3.0 che hanno subito un cambiamento.

Rompere cambiamento

Utilizzando un negate ! come il primo modello non corrisponde più nulla.

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

In sostanza, che cosa vuol dire è che è necessario sostituire

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

con

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

e siete a posto.


Inoltre, come indicato nel commento di MildlySerious, si dovrebbe avere .pipe(filter.restore()) invece di .pipe(filter.restore)

+0

Ciò che ha funzionato per me era usare i doppi asterischi: '['**', '! Cake']' per i file che si trovano nelle sottodirectory. –

0

Usa filtro come questo gulpFilter(['*', '!app/vendor'])

Problemi correlati