node-glob學習

來源:互聯網
上載者:User

標籤: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學習

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.