webentwicklung-frage-antwort-db.com.de

grunzen (Minimatch / Glob) Ordnerausschluss

Ich habe eine Situation, in der ich versuche, mit Grunzen eine Codebasis 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 ausgeführt wird, der einen Ordner ausschließt.

Ich möchte Folgendes aufnehmen:

ignoreme

und stimmen mit diesen überein:

/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

Das passt zu allem, auch zu ignoreme:

/**/*.js

Also dachte ich mir, ich könnte etwas machen wie:

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

aber das stimmt mit Dateien im Ordner ignoreme überein.

Ich bin es gewohnt, Regex zu schreiben, kann aber 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, es passt einfach nicht zu allem.

Gibt es eine Möglichkeit, entweder einen regulären Ausdruck zu verwenden, um Dateipfade zu grunzen, oder dies für mich zum Laufen zu bringen?

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)
})

Ich wäre immer noch interessiert, wenn Ordnerausschlüsse im Minimatch möglich sind.

74
Jesse

In der derzeit in der Entwicklung befindlichen Version 0.4.0a unterstützt die Methode grunt.file.expand Nun Ausschlüsse, und zwar auf eine weniger komplexe Weise als die zugrunde liegende Minimatch-Matching-Bibliothek. Dies ist möglich, weil grunt.file.expand mehrere Muster akzeptiert (während Minimatch nur eines akzeptiert).

From die grunt.file.expand Dokumentation :

Diese Methode akzeptiert entweder durch Kommas getrennte Platzhaltermuster oder ein Array von Platzhaltermustern. Pfade, die mit Mustern beginnen! wird aus dem zurückgegebenen Array ausgeschlossen. Muster werden in der richtigen Reihenfolge verarbeitet, sodass die Reihenfolge von Einschluss und Ausschluss von Bedeutung ist.

Das heißt, Sie könnten ['/**/*.js', '!**/ignoreme/**'] Angeben, 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 grunt.file.match unit tests , wenn Sie wirklich neugierig sind.

Beachten Sie, dass die Version von Grunt, die diese Funktionalität bietet, noch nicht offiziell veröffentlicht wurde. Wenn Sie jedoch daran interessiert sind, sie in einem Projekt zu verwenden, lesen Sie Wann kann ich die in der Entwicklung befindliche Funktion 'X' verwenden?). FAQ Eintrag.

149