Node-Glob模塊介紹

倉庫:https://github.com/isaacs/node-glob
原文:https://www.cnblogs.com/liulangmao/p/4552339.html

image.png

這個模塊是干什么的


nodeglob模塊允許你使用 *等符號, 來寫一個glob規(guī)則,像在shell里一樣,獲取匹配對應(yīng)規(guī)則的文件。這個glob工具基于javascript.它使用了 minimatch 庫來進(jìn)行匹配

使用方法


  1. 首先下載glob包:
    npm install glob
  2. 調(diào)用:
var glob = require("glob")

// options 是可選的
glob("**/*.js", options, function (er, files) {
  // files 是匹配到的文件的數(shù)組.
  // 如果 `nonull` 選項(xiàng)被設(shè)置為true, 而且沒有找到任何文件,那么files就是glob規(guī)則本身,而不是空數(shù)組
  // er是當(dāng)尋找的過程中遇的錯誤
})

globs 就是模式,比如當(dāng)你在命令行里輸入ls *.js, 又或者是你在 .gitignore 文件里寫的 bulid/* 這些.
在解析路徑模型的時候, 大括號里用多個逗號隔開的內(nèi)容會被展開, 里面的部分也可以包含"/" ,比如 a{/b/c, bcd} 會被展開成 a/b/cabcd

路徑中的某一段可以使用下面的這些字符表示,他們各自都有很炫的作用:

  1. * : 匹配該路徑段中0個或多個任意字符:
//*:匹配路徑中某部分:0個或多個字符
glob("js/*.js",function (er, files) {
    console.log(files)
})

獲取js目錄下的所有js文件.(不包括以.開頭的文件)

  1. ?: 匹配該路徑段中1個任意字符:
//?:匹配路徑中某部分:1個字符
glob("js/?.js",function (er, files) {
    console.log(files)
})

獲取js目錄下所有名字只有1個字的js.

  1. [...] : 匹配該路徑段中在指定范圍內(nèi)字符:
    注意:不能組合,只能是其中一個字符
//[]:匹配路徑中某部分:指定的范圍
    glob("js/a[0-3].js",function (er, files) {
        console.log(files)
    })

獲取js目錄下a開頭,第二個字符為0-3之間(包括03)的js(a03.js不能被匹配到)

  1. *(pattern|pattern|pattern) : 匹配括號中多個模型的0個或多個或任意個的組合
    注意|前后不能有空格
//*(pattern|pattern|pattern): 匹配路徑中的某部分: 多個模型中的0個或多個. //除了三個模型本身,如果是組合也可以,比如ab.js,但是僅僅包含某個模型是不行的,比如a4.js.
    glob("js/*(a|a1|b).js",function (er, files) {
        console.log(files)
    })

獲取js目錄下a.js,a1.js,b.js,或者a,a1,b這幾個字符的組合的js,比如ab.js

  1. !(pattern|pattern|pattern): 匹配不包含任何模型
    需要注意: !(pattern|pattern|pattern) 不等于 !(*(pattern|pattern|pattern))
//!(pattern|pattern|pattern): 匹配路徑中的某部分: 不包含任何模型. //帶有a或者b的,都排除.需要注意的是,它并非是*(a|b)的取反
    glob("js/!(a|b).js",function (er, files) {
        console.log(files)
    })

獲取js目錄下名字中不包含a,也不包含b的所有文件.

  1. ?(pattern|pattern|pattern): 匹配多個模型中的0個或任意1個.
    它和 4的區(qū)別是,不可以組合.必須完全匹配
//?(pattern|pattern|pattern): 匹配路徑中的某部分: 多個模型中的0個或1個. //精確匹配模型,不可以組合.
    glob("js/?(a|a2|b).js",function (er, files) {
        console.log(files)
    })

獲取js目錄下a.js,a2.js,b.js

  1. +(pattern|pattern|pattern): 匹配多個模型中的1個或多個.
    它和 4 的區(qū)別是,必須有一個,為空不匹配
//+(pattern|pattern|pattern): 匹配路徑中的某部分: 多個模型中的1個或多個. //可以是任意一個模型,也可以是他們的組合,比如ab.js
    glob("js/+(a|a1|b).js",function (er, files) {
        console.log(files)
    })

獲取js目錄下a.js,a1.js,b.js,或者a,a1,b這幾個字符的組合的js,比如ab.js

  1. @(pattern|pat*|pat?erN) : 匹配多個模型中的任意1個.
//@(pattern|pattern|pattern): 匹配路徑中的某部分: 多個模型中的1個. //精確匹配模型,不可以組合.和?的區(qū)別就是不可以為空.必須要是其中的一個.
    glob("js/@(a|a1|b).js",function (er, files) {
        console.log(files)
    })

6 的區(qū)別是不匹配為空的情況

  1. **: 和1 一樣,可以匹配任何內(nèi)容,但**不僅匹配路徑中的某一段,而且可以匹配'a/b/c'這樣帶有'/'的內(nèi)容,所以,它還可以匹配子文件夾下的文件.
//**: 不是一個單獨(dú)的路徑中的某部分,而是可以帶有'/',所以所有當(dāng)前文件夾和子文件夾下都進(jìn)行匹配
    glob("**/@(a|a1|b).js",function (er, files) {
        console.log(files)
    })

獲取當(dāng)前目錄所有文件夾及子文件夾下的a.js,a1.js,b.js
還有一種方式是設(shè)置 matchBase 屬性為true ,同樣可以起到在當(dāng)前路徑下搜索所有子文件夾的效果:

//matchBase: 設(shè)置為true以后,在當(dāng)前目錄下所有的文件夾和子文件夾里尋找匹配的文件
    glob("@(a|a1|b).js",{matchBase:true},function (er, files) {
        console.log(files)
    })

沒有獲取到任何匹配文件:

當(dāng)glob沒有獲取到任何匹配的文件是,并不會像shell里那樣返回模型本身,files參數(shù)返回的是一個空數(shù)組,如果需要讓files返回的是模型本身,需要設(shè)置nonull屬性為true

//nonull: 設(shè)置為true以后,如果沒有找到匹配的文件,不返回空字符串,而是返回原始glob語句
glob("@(c|d|e).js",{nonull:true},function (er, files) {
    console.log(files)
})

同步獲取匹配文件列表:
前面講到的都是異步的方法,傳入一個回調(diào),當(dāng)獲取到匹配的文件的時候執(zhí)行回調(diào).如果需要同步的獲取文件列表,可以這樣做:

var files = glob.sync(pattern, [options])

Glob 類


參考原文: https://github.com/isaacs/node-glob

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市谍婉,隨后出現(xiàn)的幾起案子唤蔗,更是在濱河造成了極大的恐慌棍掐,老刑警劉巖掘殴,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仍源,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)控淡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門肤视,熙熙樓的掌柜王于貴愁眉苦臉地迎上來遭垛,“玉大人庶喜,你說我怎么就攤上這事本缠∝以睿” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵翠勉,是天一觀的道長霉颠。 經(jīng)常有香客問我对碌,道長朽们,這世上最難降的妖魔是什么叁丧? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任稚瘾,我火速辦了婚禮狐史,結(jié)果婚禮上楼咳,老公的妹妹穿的比我還像新娘烛恤。我一直安慰自己母怜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布缚柏。 她就那樣靜靜地躺著苹熏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上轨域,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天袱耽,我揣著相機(jī)與錄音,去河邊找鬼干发。 笑死朱巨,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的铐然。 我是一名探鬼主播蔬崩,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼搀暑!你這毒婦竟也來了沥阳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤自点,失蹤者是張志新(化名)和其女友劉穎桐罕,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體桂敛,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡功炮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了术唬。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片薪伏。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖粗仓,靈堂內(nèi)的尸體忽然破棺而出嫁怀,到底是詐尸還是另有隱情,我是刑警寧澤借浊,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布塘淑,位于F島的核電站,受9級特大地震影響蚂斤,放射性物質(zhì)發(fā)生泄漏存捺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一曙蒸、第九天 我趴在偏房一處隱蔽的房頂上張望捌治。 院中可真熱鬧,春花似錦纽窟、人聲如沸具滴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春趋艘,著一層夾襖步出監(jiān)牢的瞬間疲恢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工瓷胧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留显拳,地道東北人。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓搓萧,卻偏偏與公主長得像杂数,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子瘸洛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容