glob 是由普通字符和/或通配字符組成的字符串,用于匹配文件路徑??梢岳靡粋€(gè)或多個(gè) glob 在文件系統(tǒng)中定位文件。
src() 方法接受一個(gè) glob 字符串或由多個(gè) glob 字符串組成的數(shù)組作為參數(shù),用于確定哪些文件需要被操作。glob 或 glob 數(shù)組必須至少匹配到一個(gè)匹配項(xiàng),否則 src() 將報(bào)錯(cuò)。當(dāng)使用 glob 數(shù)組時(shí),將按照每個(gè) glob 在數(shù)組中的位置依次執(zhí)行匹配 - 這尤其對于取反(negative) glob 有用。
字符串片段(segment)是指兩個(gè)分隔符之間的所有字符組成的字符串。在 glob 中,分隔符永遠(yuǎn)是 / 字符 - 不區(qū)分操作系統(tǒng) - 即便是在采用 \\ 作為分隔符的 Windows 操作系統(tǒng)中。在 glob 中,\\ 字符被保留作為轉(zhuǎn)義符使用。
如下, * 被轉(zhuǎn)義了,因此,* 將被作為一個(gè)普通字符使用,而不再是通配符了。
'glob_with_uncommon_\\*_character.js'
避免使用 Node 的 path 類方法來創(chuàng)建 glob,例如 path.join。在 Windows 中,由于 Node 使用 \\ 作為路徑分隔符,因此將會產(chǎn)生一個(gè)無效的 glob。還要避免使用 __dirname 和 __filename 全局變量,由于同樣的原因,process.cwd() 方法也要避免使用。
const invalidGlob = path.join(__dirname, 'src/*.js');
在一個(gè)字符串片段中匹配任意數(shù)量的字符,包括零個(gè)匹配。對于匹配單級目錄下的文件很有用。
下面這個(gè) glob 能夠匹配類似 index.js 的文件,但是不能匹配類似 scripts/index.js 或 scripts/nested/index.js 的文件。
'*.js'
在多個(gè)字符串片段中匹配任意數(shù)量的字符,包括零個(gè)匹配。 對于匹配嵌套目錄下的文件很有用。請確保適當(dāng)?shù)叵拗茙в袃蓚€(gè)星號的 glob 的使用,以避免匹配大量不必要的目錄。
下面這個(gè) glob 被適當(dāng)?shù)叵拗圃?nbsp;scripts/ 目錄下。它將匹配類似 scripts/index.js、scripts/nested/index.js 和 scripts/nested/twice/index.js 的文件。
'scripts/**/*.js'
在上面的示例中,如果沒有 scripts/ 這個(gè)前綴做限制,node_modules 目錄下的所有目錄或其他目錄也都將被匹配。
由于 glob 匹配時(shí)是按照每個(gè) glob 在數(shù)組中的位置依次進(jìn)行匹配操作的,所以 glob 數(shù)組中的取反(negative)glob 必須跟在一個(gè)非取反(non-negative)的 glob 后面。第一個(gè) glob 匹配到一組匹配項(xiàng),然后后面的取反 glob 刪除這些匹配項(xiàng)中的一部分。如果取反 glob 只是由普通字符組成的字符串,則執(zhí)行效率是最高的。
['script/**/*.js', '!scripts/vendor/']
如果任何非取反(non-negative)的 glob 跟隨著一個(gè)取反(negative) glob,任何匹配項(xiàng)都不會被刪除。
['script/**/*.js', '!scripts/vendor/', 'scripts/vendor/react.js']
取反(negative) glob 可以作為對帶有兩個(gè)星號的 glob 的限制手段。
['**/*.js', '!node_modules/']
在上面的示例中,如果取反(negative)glob 是 !node_modules/**/*.js,那么各匹配項(xiàng)都必須與取反 glob 進(jìn)行比較,這將導(dǎo)致執(zhí)行速度極慢。
兩個(gè)或多個(gè) glob 故意或無意匹配了相同的文件就被認(rèn)為是匹配重疊(overlapping)了。如果在同一個(gè) src() 中使用了會產(chǎn)生匹配重疊的 glob,gulp 將盡力去除重疊部分,但是在多個(gè) src() 調(diào)用時(shí)產(chǎn)生的匹配重疊是不會被去重的。
更多建議: