Ich habe eine Situation, in der ich versuche, eine Codebasis mit Grunzen zu fusseln, mit Ausnahme bestimmter Ordner.
grunt verwendet minimatch (ähnlich wie bsdglob) unter der Haube, um Dateien abzugleichen, aber ich kann anscheinend nicht herausfinden, wie ein .gitignore-Stil einen Ordner ausschließt.
Ich möchte dies aufnehmen:
ignoreme
und passen Sie diese zusammen:
/folder/path/here/to/something/ok.js
/another/folder/path.js
/test.js
aber nicht mit diesen übereinstimmen:
/folder/ignoreme/something.js
/folder/path/here/to/ignoreme/metoo/file.js
Dies wird zu allem passen, einschließlich Ignoranz:
/**/*.js
Also dachte ich mir, ich könnte so etwas tun:
/**/!(ignoreme)/**/*.js
aber das stimmt mit Dateien im ignoreme-Ordner überein.
Ich bin an Regexe gewöhnt, kann aber anscheinend nicht herausfinden, wie man ein Muster oder etwas hier wiederholt - ich habe auch Dinge ausprobiert wie:
/(!(ignoreme)|*)*/*.js
Ich hoffe, der Container würde sich wiederholen, aber das funktioniert nicht. Er passt einfach nicht zu allem.
Gibt es eine Möglichkeit, entweder einen regulären Ausdruck an grunzende Dateipfade zu übergeben oder diese Funktion für mich zu nutzen?
Aktualisieren:
So gehe ich derzeit mit diesem Problem um:
var pattern = /\/ignoreme\//
var files = grunt.file.expandFiles(arrayOfFilesPassedToMinimatch).filter(function(f){
return !pattern.test(f)
})
Es würde mich immer noch interessieren, ob Ordnerausschlüsse in Minimatch möglich sind.
map
isfiles
enthält ein Array vonTRUE
undFALSE
Werten.filter
wird korrektfiles
als Liste der gefilterten Pfade festgelegt.Antworten:
In der derzeit in der Entwicklung befindlichen Version 0.4.0a unterstützt die
grunt.file.expand
Methode jetzt Ausschlüsse und dies auf eine wohl weniger komplexe Weise als die zugrunde liegende Minimatch-Matching-Bibliothek. Dies ist möglich, weil mehrere Mustergrunt.file.expand
akzeptiert werden (während Minimatch nur eines akzeptiert).Aus der Dokumentation zu grunt.file.expand :
Das heißt, Sie können angeben,
['/**/*.js', '!**/ignoreme/**']
und während das erste Muster alle.js
Dateien zur Ergebnismenge hinzufügt , entfernt das zweite Muster dann alle/ignoreme/
Dateien aus der Ergebnismenge.Werfen Sie einen Blick auf die Unit-Tests grunt.file.match, wenn Sie wirklich neugierig sind.
Beachten Sie, dass die Version von grunt, die diese Funktionalität bietet, nicht offiziell veröffentlicht wurde. Wenn Sie jedoch daran interessiert sind, sie in einem Projekt zu verwenden, lesen Sie den Abschnitt Wann kann ich die in der Entwicklung befindliche Funktion 'X' verwenden? FAQ Eintrag.
quelle
grunt watch --verbose
um zu sehen, welche Dateien angesehen werden