標籤:pat com ons nod 事件 install 包括 路徑 sum
node的glob模組允許你使用 *等符號, 來寫一個glob規則,像在shell裡一樣,擷取匹配對應規則的檔案.
這個glob工具基於javascript.它使用了 minimatch 庫來進行匹配
用法:
首先下載glob包:
npm install glob
調用格式:
var glob = require("glob")// options 是可選的glob("**/*.js", options, function (er, files) { // files 是匹配到的檔案的數組. // 如果 `nonull` 選項被設定為true, 而且沒有找到任何檔案,那麼files就是glob規則本身,而不是空數組 // er是當尋找的過程中遇的錯誤})
"globs" 就是模型,比如當你在命令列裡輸入 ls *.js, 又或者是你在 .gitignore 檔案裡寫的 bulid/* 這些.
在解析路徑模型的時候, 大括弧裡用多個逗號隔開的內容會被展開, 裡面的部分也可以包含"/" ,比如 a{/b/c, bcd} 會被展開成 a/b/c 和 abcd
路徑中的某一段可以使用下面的這些字元表示,他們各自都有很炫的作用:
- 1. * : 匹配該路徑段中0個或多個任一字元:
//*:匹配路徑中某部分:0個或多個字元glob("js/*.js",function (er, files) { console.log(files)})擷取js目錄下的所有js檔案.(不包括以‘.‘開頭的檔案)
- 2. ? : 匹配該路徑段中1個任一字元:
//?:匹配路徑中某部分:1個字元glob("js/?.js",function (er, files) { console.log(files)})擷取js目錄下所有名字只有1個字的js.
- 3. [...] : 匹配該路徑段中在指定範圍內字元:
注意不能組合,只能是其中一個字元
//[]:匹配路徑中某部分:指定的範圍glob("js/a[0-3].js",function (er, files) { console.log(files)})擷取js目錄下a開頭,第二個字元為0-3之間(包括0和3)的js(a03.js不能被匹配到)
- 4. *(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
- 5. !(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的所有檔案.
6. ?(pattern|pattern|pattern) : 匹配多個模型中的0個或任意1個.
它和 4 的區別是,不可以組合.必須完全符合
//?(pattern|pattern|pattern): 匹配路徑中的某部分: 多個模型中的0個或1個.//精確匹配模型,不可以組合.glob("js/?(a|a2|b).js",function (er, files) { console.log(files)})擷取js目錄下a.js,a2.js,b.js
- 7. +(pattern|pattern|pattern) : 匹配多個模型中的1個或多個.
它和 4 的區別是,必須有一個,為空白不匹配
//+(pattern|pattern|pattern): 匹配路徑中的某部分: 多個模型中的1個或多個.//可以是任意一個模型,也可以是他們的組合,比如ab.jsglob("js/+(a|a1|b).js",function (er, files) { console.log(files)})擷取js目錄下a.js,a1.js,b.js,或者a,a1,b這幾個字元的組合的js,比如ab.js
- 8. @(pattern|pat*|pat?erN) : 匹配多個模型中的任意1個.
//@(pattern|pattern|pattern): 匹配路徑中的某部分: 多個模型中的1個.//精確匹配模型,不可以組合.和?的區別就是不可以為空白.必須要是其中的一個.glob("js/@(a|a1|b).js",function (er, files) { console.log(files)})和 6 的區別是不匹配為空白的情況
- 9. ** : 和 1 一樣,可以匹配任何內容,但**不僅匹配路徑中的某一段,而且可以匹配 ‘a/b/c‘ 這樣帶有‘/‘的內容,所以,它還可以匹配子檔案夾下的檔案.
//**: 不是一個單獨的路徑中的某部分,而是可以帶有‘/‘,所以所有當前檔案夾和子檔案夾下都進行匹配glob("**/@(a|a1|b).js",function (er, files) { console.log(files)})擷取目前的目錄所有檔案夾及子檔案夾下的a.js,a1.js,b.js
還有一種方式是設定 matchBase 屬性為 true ,同樣可以起到在當前路徑下搜尋所有子檔案夾的效果:
//matchBase: 設定為true以後,在目前的目錄下所有的檔案夾和子檔案夾裡尋找匹配的檔案glob("@(a|a1|b).js",{matchBase:true},function (er, files) { console.log(files)})
沒有擷取到任何匹配檔案:
當glob沒有擷取到任何匹配的檔案是,並不會像shell裡那樣返回模型本身,files參數返回的是一個空數組,如果需要讓files返回的是模型本身,需要設定 nonull 屬性為 true
//nonull: 設定為true以後,如果沒有找到匹配的檔案,不返回Null 字元串,而是返回原始glob語句glob("@(c|d|e).js",{nonull:true},function (er, files) { console.log(files)})
同步擷取匹配檔案清單:
前面講到的都是非同步方法,傳入一個回調,當擷取到匹配的檔案的時候執行回調.如果需要同步的擷取檔案清單,可以這樣做:
var files = glob.sync(pattern, [options])
Glob類:
通過執行個體化一個glob.Glob類,可以獲得一個glob對象:
var Glob = require("glob").Globvar mg = new Glob(pattern, options, cb)
執行個體化的時候傳入的參數和glob(pattern,options,cb)是一樣的.
它能夠得到一個傳回值,這個傳回值是一個EventEmitter.
如果在選項中設定 sync 屬性為 true, 表示同步擷取.不可以傳入cb回調. 要擷取匹配結果,可以通過 g.found 來擷取:
var globInstance = new glob.Glob("@(a|a1|b).js",{nonull:true,matchBase:true,sync:true});console.log(globInstance.found);
事件:
- end : end事件會在檔案匹配結束,找出所有匹配結果的時候觸發,它接受的參數就是找到的檔案的數組
- match : match事件會在每次匹配到一個檔案的時候觸發,它接受的參數就是匹配到的檔案
- error : error事件會在匹配遇到錯誤的時候觸發.接受的參數就是錯誤資訊
- abort : 當執行個體調用了.abort()方法時,abort事件被觸發
方法:
pause 暫停匹配搜尋
resume 繼續匹配搜尋
abort 永遠停止匹配搜尋,不能繼續
var globInstance = new glob.Glob("js/@(a|a1|b).js",{nonull:true});globInstance.on(‘match‘,function(file){ console.log(file)});globInstance.on(‘end‘,function(files){ console.log(files)});globInstance.on(‘abort‘,function(){ console.log(‘abort‘)});globInstance.pause();globInstance.resume();globInstance.abort();
屬性:
minimatch glob所使用的minimatch對象.
options 傳遞給函數的options選項.
aborted 調用過abort()函數後它的值就是true.
cache
- statCache
- symlinks
- realpathCache
options選項:
options用於配置模型匹配時候的匹配方式. 所有可以被傳入到minimatch裡的參數也都可以被傳入到glob,另外node-glob還自己添加了一些配置項.
所有的選項如果沒有特殊說明,預設值都是false
所有的選項也都適用於Glob類.
cwd
root
dot
nomount
mark
nosort
stat
silent
strict
cache
statCache
symlinks
sync
nounique
nonull
debug
nobrace
noglobstar
noext
nocase
matchBase
nonull
nodir
ignore
follow
realpath
nonegate
nocomment
參考原文: https://github.com/isaacs/node-glob
轉自:http://www.cnblogs.com/liulangmao/p/4552339.html
node-glob學習