gulp globbing - wie man alles unter dem Verzeichnis sieht

108

Dies ist eine ziemlich dumme Frage, aber ich konnte keine zufriedenstellende Antwort finden: Wie verwende ich gulp globbing, um alle Dateien in allen Unterverzeichnissen unterhalb eines bestimmten Verzeichnisses auszuwählen ?

Ich habe es versucht:

'./src/less' './src/less/' './src/less/*'

Keiner von ihnen scheint zu funktionieren.

Jehan
quelle

Antworten:

178

Das Muster für alle Dateien unter allen Verzeichnissen ist normalerweise ./src/less/**/*.*oder ./src/less/**/*sollte entweder funktionieren.

Im Allgemeinen ist es besser, bestimmte Dateierweiterungen abzugleichen - auch wenn sie alle gleich sein sollten -, um zu verhindern, dass Systemdateien oder anderer Müll abgerufen werden. In diesem Fall können Sie nur ./src/less/**/*.lessfür .lessDateien oder so etwas .src/less/**/*.{less,css}für beide .lessund .cssDateien tun .

Die Grunt-Website bietet eine ziemlich gute Referenz für die meisten Minimatch-Globs. (Sowohl Grunt als auch gulp verwenden Minimatch , da es die Glob-Bibliothek für so ziemlich alles ist, was mit Node zu tun hat.)

Es wäre schön, wenn gulp oder minimatch ihre eigenen vollständigen Dokumente hätten, aber das ist Open Source für Sie.

Übereifrig
quelle
Ich werde die Grunt-Website besuchen, danke. Der Punkt über die Systemdateien macht definitiv Sinn. Der Grund, warum ich möchte, dass es etwas lockerer wird, ist, dass ich es für die Uhr benutze.
Jehan
1
Wenn Sie es noch nicht getan haben, empfehle ich dringend, das gulp-watchModul zum Anzeigen von Dateien zu lernen und zu verwenden , da es auch das Suchen nach neuen Dateien handhaben kann. Es ist etwas mehr Arbeit einzurichten, aber es lohnt sich, IMO.
OverZealous
8
Zum späteren Nachschlagen verwende ich ein Tool bei globtester.com , es verwendet Minimatch, das Gulp über Node-Glob verwendet. "glob bezieht sich auf die Node-Glob-Syntax oder kann ein direkter Dateipfad sein." (Quelle: github.com/gulpjs/gulp/blob/master/docs/API.md ) "[node-glob] verwendet die Minimatch-Bibliothek, um den Abgleich durchzuführen." (Quelle: github.com/isaacs/node-glob )
Daniel Dropik
1

'./src/less/**'scheint zu funktionieren. Wenn jemand eine genauere Liste aller Globbing-Befehle hat, würde ich Ihre Antwort gerne akzeptieren und zu den Gulp-Dokumenten hinzufügen. Im Moment müssen Sie zu den Dokumenten gehen, um eines der Submodule von gulp zu erhalten, das Ihnen dann eine Liste von Manpages gibt. Es wäre gut, eine direkte Referenz zu haben, insbesondere für Designer, die Schluck verwenden.

Jehan
quelle
1
gulp.watch('./build/**', ...)scheint (mis?) für einige Änderungen im übergeordneten Verzeichnis auszulösen (z. B. ./.git/). Das Hinzufügen des zusätzlichen / * am Ende scheint dieses Problem zu vermeiden : gulp.watch('./build/**/*', ...).
Medmunds
@medmunds Ich habe ähnliche Ergebnisse gefunden. Der Glob MUSS mit einem * oder einem bestimmten * .less enden. *. * funktioniert nicht, da ohne Erweiterung etwas fehlt. Es scheint das zu nehmen . und Match mit POSIX Style Matching; Das heißt, wenn eine Datei keinen 'Punkt' enthält, stimmt sie nicht überein. Vielleicht sollte es einen Sonderfall für geben . als . via DIR unter Windows entspricht 'LIZENZ', ln *.*tut dies aber leider nicht. Zwei verschiedene Bedeutungen für ' . ' ist traurig. *scheint zu tun, was wir brauchen. A . glob ist meiner Meinung nach wahrscheinlich nie das, was der Entwickler wirklich beabsichtigt hat, und möglicherweise muss eine Warnung ausgegeben werden.
Andrew T Finnell
@filthy_wizard - **ist rekursiv.
Steven Ventimiglia