2012-09-28 10 views
73

Mam sytuację, w której próbuję użyć pomruku, aby wskazać kod, z wyjątkiem określonych folderów.Wykluczenie folderu (minimatch/glob)

grunt wykorzystuje minimatch (podobny do bsdglob) pod maską, aby dopasować pliki, ale nie mogę się domyślić, jak zrobić wykluczenie stylu .gitignore z folderu.

Chciałbym łykać to:

ignoreme

i dopasować te:

/folder/path/here/to/something/ok.js 
/another/folder/path.js 
/test.js 

ale nie pasuje do nich:

/folder/ignoreme/something.js 
/folder/path/here/to/ignoreme/metoo/file.js 

ten będzie pasował do wszystkiego, w tym ignoreme:

/**/*.js 

więc pomyślałam mógłby zrobić coś takiego:

/**/!(ignoreme)/**/*.js 

ale pasujący pliki w folderze ignoreme.

Przywykłem do regexes, ale nie wydaje się, aby dowiedzieć się, jak powtórzyć wzór lub coś tutaj - Próbowałem również rzeczy jak:

/(!(ignoreme)|*)*/*.js 

nadzieję, że pojemnik będzie powtarzać, ale to nie robi Działa, po prostu nie pasuje do wszystkiego.

Jakikolwiek sposób przekazania ścieżek plików regex do gruntu lub sprawdzenie, czy to działa?

Aktualizacja:

Oto jak mam obecnie do czynienia z tym problemem:

var pattern = /\/ignoreme\// 
var files = grunt.file.expandFiles(arrayOfFilesPassedToMinimatch).filter(function(f){ 
    return !pattern.test(f) 
}) 

bym nadal być zainteresowany, jeśli są możliwe folderu wyklucza w minimatch.

+2

Użycie 'map' powoduje, że' files' zawiera tablicę wartości "TRUE" i "FALSE". 'filter' poprawnie ustawi' pliki' na listę filtrowanych ścieżek. – deefour

+0

Dobrze, musisz pisać w nocy. Zaktualizowano próbkę kodu do pracy. – Jesse

Odpowiedz

148

W aktualnie opracowywanej wersji 0.4.0a, metoda grunt.file.expand obsługuje teraz wykluczenia i robi to w prawdopodobnie mniej skomplikowany sposób niż odpowiadająca biblioteka dopasowania typu minimatch. Jest to możliwe, ponieważ grunt.file.expand akceptuje wzory (podczas gdy minimatch akceptuje tylko jeden).

Z the grunt.file.expand documentation:

Metoda ta przyjmuje albo oddzielony przecinkami wzory zastępczych lub tablicę wieloznacznych wzorów. Ścieżki pasujące do wzorców zaczynających się od! zostanie wykluczone ze zwróconej tablicy. Wzorce są przetwarzane w kolejności, więc kolejność włączania i wykluczania jest znacząca.

Oznacza to, że można określić ['/**/*.js', '!**/ignoreme/**'] i jednocześnie pierwszy wzór będzie dodać wszystkie .js pliki do zbioru wynikowego, drugi wzór będzie następnie usunąć wszystkie pliki /ignoreme/ ze zbioru wynikowego.

Spójrz na grunt.file.match unit tests, jeśli jesteś naprawdę ciekawy.

Należy pamiętać, że wersja pomruku oferująca tę funkcjonalność nie została oficjalnie wydana, ale jeśli chcesz ją wykorzystać w projekcie, zobacz wpis w sekcji FAQ w artykule When will I be able to use in-development feature 'X'?.

+0

Dziękuję bardzo za odpowiedź! Wygląda to na znacznie bardziej eleganckie rozwiązanie mojego problemu - poczekam na stabilne wydanie, ale zmienię go, kiedy będzie dostępny! – Jesse

+14

Warto zauważyć: wzorce wykluczeń działają tylko wtedy, gdy się pojawią * PO ZAKOŃCZENIU * cokolwiek-to-jest-wykluczone zostało dopasowane przez wzorzec włączenia. Byłem zdezorientowany, umieszczając moje schematy wykluczenia jako pierwsze. –

+3

'grunt watch --verbose', aby zobaczyć, które pliki są oglądane – Shanimal

Powiązane problemy