2014-10-21 5 views
31

Mam projektu takiego:Glob/minimatch: jak gulp.src() wszystko, a następnie wykluczyć folder, ale zawsze o jeden plik w nim

root 
    |-incl1 
    |-incl2 
    |- ... 
    |-excl1 
    |-excl2 
    |- .gitignore <-- keep this one 
    |- (other files) <-- exclude them 

muszę napisać gulp.src(), który będzie zawierał wszystkie foldery z wyjątkiem excl1 i excl2ale zachować plik .gitignore.

To jest mój kod, który nie działa:

gulp.src([ 
    baseDir + '/**', 
    '!' + baseDir + '/{excl1, excl1/**}' 
    '!' + baseDir + '/excl2/{**, !.gitignore}' // <-- doesn't work 
], {dot: true}) 
+1

Ten, kto wynalazł składnię w stylu gwiazdy, zasługuje na piekło. Poważnie. –

Odpowiedz

72

To wydaje się działać:

gulp.src([ 
    baseDir + '/**',        // Include all 
    '!' + baseDir + '/excl1{,/**}',    // Exclude excl1 dir 
    '!' + baseDir + '/excl2/**/!(.gitignore)', // Exclude excl2 dir, except .gitignore 
], { dot: true }); 

Wyłączając pojedynczy plik z glob meczu było trudne, ponieważ nie ma podobnych przykładów w minimatch docs.

https://github.com/isaacs/minimatch

"Jeśli wzorzec rozpoczyna się ! charakteru, to jest negowany".

+0

Nie idealne. Teraz wszystkie pliki .gitignore pod excl2 są zachowywane. – Heikki

+0

To nie byłby dla mnie duży problem. Dzięki, spróbuję. – Borek

+0

Działa. Kręcone szelki nie są nawet potrzebne. – Borek