Glob Pattern:方便、快捷地查詢(xún)你項(xiàng)目中的所有文件
簡(jiǎn)介
Glob Pattern 是一套查詢(xún)系統(tǒng)中文件的語(yǔ)法,類(lèi)似于正則表達(dá)式,但又與正則表達(dá)式不同。Glob Pattern 最開(kāi)始起源于 Unix 系統(tǒng) Shell 命令行腳本。以 cp *.jpg ./thumbnails
舉例——這句指令表示復(fù)制當(dāng)前目錄內(nèi)所有以 .jpg
結(jié)尾的文件到 thumbnails/
目錄中,語(yǔ)法很簡(jiǎn)潔。

由于 Glob Pattern 這套匹配文件的語(yǔ)法太好用了,因此各個(gè)編程語(yǔ)言都有自己的一套。在前端領(lǐng)域 Node.js 平臺(tái),比較有代表性實(shí)現(xiàn)包有:glob
、fast-glob
和 globby
。不過(guò)從下載量上來(lái)看,glob
是最受歡迎的,如果你的項(xiàng)目需要用到查詢(xún)文件的需求,可以?xún)?yōu)先考慮使用 glob
。
語(yǔ)法
Glob Pattern 相當(dāng)于正則表達(dá)式,語(yǔ)法沒(méi)那么復(fù)雜,因?yàn)?Glob Pattern 的目的很簡(jiǎn)單,就是為了匹配文件——沒(méi)有目錄什么事。下面我們就來(lái)學(xué)習(xí)下 Glob Pattern 的語(yǔ)法。
?
:匹配任意一個(gè)字符*
:匹配任意長(zhǎng)度的字符串/
:匹配一個(gè)路徑分隔符**
:這個(gè)就比較有意思了,Glob Pattern 中它有個(gè)專(zhuān)有名詞叫 globstar。一共有兩種使用方式:?jiǎn)为?dú)(即**
)使用時(shí)匹配任意層級(jí)下的所有文件;后面跟路徑分隔符(即**/
)時(shí),匹配任意層級(jí)的目錄。/myapp/**.js
是無(wú)效用法{a,b}
:是一個(gè)延展語(yǔ)法,Glob Pattern 中它有個(gè)專(zhuān)有名詞叫 brace expansion,會(huì)講當(dāng)前的 Glob Pattern 擴(kuò)展成多個(gè)單獨(dú)的形式。{}
內(nèi)有兩種分隔符號(hào)可以使用,分別是逗號(hào)(,
)和兩點(diǎn)(..
)。
比如:
**/*.{b,c}
會(huì)被擴(kuò)展為**/.b
和**/.c
,最終的結(jié)果也是這兩個(gè) Pattern比如:
**/{a..c}
會(huì)被擴(kuò)展為**/.a
、**/.b
和**/.c
!(a|b)
:一個(gè)擴(kuò)展語(yǔ)法,表示排除(!
)圓括號(hào)(()
)里可能的值
練習(xí)
以下截圖來(lái)自 globster.xyz(https://globster.xyz/)站點(diǎn),這是一個(gè)不錯(cuò)的學(xué)習(xí) Glob Pattern 語(yǔ)法的在線站點(diǎn)。感興趣的同學(xué)訪問(wèn)嘗試下。
我們以這樣一個(gè)項(xiàng)目結(jié)構(gòu)為例:

**/*.js
匹配項(xiàng)目中的任意 js 文件。

同理,匹配項(xiàng)目中的所有的 png 圖片就是 **/*.png
。

/myapp/config/*
匹配 config/
目錄下的所有文件。

**/*.{png,ico,md}
匹配所有的 png、ico 和 Markdown 文件。

/myapp/src/**/*.ts
匹配 src
目錄下所有的 ts 文件。

**/!(*.module).ts
匹配所有的 .ts
文件,但排除以 .module.ts
結(jié)尾的文件。

glob
的使用
下面我們簡(jiǎn)單了解下 glob 包的使用。
安裝依賴(lài):
引入 glob
查詢(xún)方法:
使用:
總結(jié)
以上就是關(guān)于 Glob Pattern 的所有內(nèi)容。如果你的工作中有涉及文件查找工作,建議嘗試下 glob
下看看,會(huì)讓你的查找更有效率,代碼也更加簡(jiǎn)潔。