2014-05-09 8 views
49

Sono un nuovo utente di gulp.js. Mi piacerebbe spostare tutti i miei file non javascript in una directory di build. Quello che ho in questo momento è questa:Corrispondenza Glob, esclude tutti i file JS

//Test copy 
gulp.task('test-copy', function() { 
    gulp.src(['myProject/src/**/*.!(js|map|src)']) 
     .pipe(gulp.dest('myProject/build')); 
}); 


//Results for various files 
myProject/css/style.css //Copied - GOOD 
myProject/html/index.html //Copied - GOOD 
myProject/js/foo.js //Not Copied - GOOD 
myProject/js/bar.min.js //Copied - BAD! 
myProject/js/jquery-2.0.3.min.js //Copied - BAD! 
myProject/js/jquery-2.0.3.min.map //Copied - BAD! 

Come si può vedere, corrisponde solo dopo che il primo punto nella stringa di percorso del file, non l'ultimo, come mi piacerebbe. Come posso modificare la stringa di ricerca glob per comportarmi come vorrei?

+0

Non ho usato sorso, ma si può solo aggiungere un $ alla fine del pattern essere passato a gulp.src? –

+1

No, purtroppo non si tratta della sintassi Regex, ma piuttosto di [extglob] (http://www.gnu.org/software/bash/manual/bashref.html#Pattern-Matching). – AlexZ

risposta

92

Prova questa modello di glob:

myProject/src/**/!(*.js|*.map|*.src) 
+22

Ha funzionato come un fascino. Per i ritardatari in futuro, questo ha causato un problema in cui il mio file manifest '.json' veniva escluso. Ho modificato lo script in questo modo, il che significa che copia ancora i file 'config.js' o' * .json': 'myProject/src/**/* (config.js | * .json |! (*. Js | * .src | * map)) ' – AlexZ

+1

Questo ha reso la mia giornata. – KFunk

+0

Questo è stato estremamente utile per la corrispondenza dei file con i nodi [grunt-ssh] (https://github.com/israelroldan/grunt-ssh) e [minimatch] (https://github.com/isaacs/minimatch). – craignewkirk