グロブの説明#

グロブとは、ファイルパスをマッチングするために使用されるリテラル文字またはワイルドカード文字(あるいはその両方)の文字列です。グロビングとは、1つ以上のグロブを使用してファイルシステム上のファイルを見つける行為のことです。

src()メソッドは、パイプラインが処理するファイルを決定するために、単一のグロブ文字列またはグロブの配列を必要とします。グロブが1つ以上一致しない場合、src()はエラーとなります。グロブの配列を使用する場合、それらは配列の順にマッチングされます。これは特に、否定グロブに役立ちます。

セグメントと区切り文字#

セグメントとは、区切り文字で区切られたすべてのものです。グロブの区切り文字は常に/文字です。これは、オペレーティングシステムに関係なく、Windowsでパス区切り文字が\\の場合でも同様です。グロブでは、\\はエスケープ文字として予約されています。

ここで、*はエスケープされているため、ワイルドカード文字ではなくリテラルとして扱われます。

'glob_with_uncommon_\\*_character.js'

グロブを作成するために、Nodeのpath.joinのようなpathメソッドを使用しないでください。Windowsでは、Nodeが区切り文字として\\を使用するため、無効なグロブが生成されます。また、同じ理由で、__dirnameグローバル、__filenameグローバル、またはprocess.cwd()を使用することも避けてください。

const invalidGlob = path.join(__dirname, 'src/*.js');

特殊文字:*(シングルスター)#

単一のセグメント内の任意の文字数(0文字を含む)にマッチします。1つのディレクトリ内のファイルをグロビングするのに役立ちます。

このグロブは、index.jsのようなファイルにはマッチしますが、scripts/index.jsscripts/nested/index.jsのようなファイルにはマッチしません。

'*.js'

特殊文字:**(ダブルスター)#

セグメントをまたいで、任意の文字数(0文字を含む)にマッチします。ネストされたディレクトリ内のファイルをグロビングするのに役立ちます。不要に大きなディレクトリにマッチしないように、ダブルスターグロブを適切に制限するようにしてください。

ここで、グロブはscripts/ディレクトリに適切に制限されています。これにより、scripts/index.jsscripts/nested/index.js、およびscripts/nested/twice/index.jsのようなファイルにマッチします。

'scripts/**/*.js'
前の例で、`scripts/`がプレフィックスとして付いていなかった場合、`node_modules`やその他のディレクトリのすべての依存関係もマッチングされていました。

特殊文字:!(否定)#

グロブは配列の順にマッチングされるため、否定グロブは、配列内に少なくとも1つの非否定グロブの後に続く必要があります。最初に一致するセットが見つかり、次に否定グロブがそれらの結果の一部を削除します。ディレクトリ内のすべてのファイルを除外する場合、ディレクトリ名の後に/**を追加する必要があります。これは、グロビングライブラリによって内部的に最適化されます。

['scripts/**/*.js', '!scripts/vendor/**']

否定グロブの後に非否定グロブが続くと、後続のマッチングセットから何も削除されません。

['scripts/**/*.js', '!scripts/vendor/**', 'scripts/vendor/react.js']

否定グロブは、ダブルスターグロブを制限するための代替として使用できます。

['**/*.js', '!node_modules/**']
前の例では、否定グロブが `!node_modules/**/*.js` の場合、グロビングライブラリは否定を最適化せず、すべてのマッチングが否定グロブと比較する必要があるため、非常に遅くなります。ディレクトリ内のすべてのファイルを無視するには、ディレクトリ名の後に`/**`グロブのみを追加してください。

重複するグロブ#

(意図的または意図せず)同じファイルにマッチする2つ以上のグロブは、重複していると見なされます。単一のsrc()内で重複するグロブが使用されている場合、gulpは重複を削除するために最善を尽くしますが、別々のsrc()呼び出し間で重複を排除しようとはしません。

高度なリソース#

gulpでグロブを扱うために必要なことのほとんどは、ここで説明されています。より深く理解したい場合は、いくつかのリソースを以下に示します。