nodejs之glob與globby
阿新 • • 發佈:2019-01-03
glob
glob允許使用規則,從而獲取對應規則匹配的檔案。這個glob工具基於javascript.它使用了 minimatch 庫來進行匹配
安裝
npm install glob
引入
const glob = require('glob')
使用
glob方法可以傳入三個引數:
1、需要進行匹配的檔案的路徑(有點類似於正則表示式)。 2、option可選項,也可以不填寫。 3、回撥函式,回撥函式內部可以返回兩個引數,一個是匹配成功後的結果會返回一個數組,如果沒有匹配上不會報錯會返回一個空陣列,一個是失敗後的結果。 示例 glob("**/*.js", options, function (er, files) { console.log(files) })
常用匹配規則
-
- :匹配單個路徑部分中的0個或多個字元。
- :如果在一個路徑的部分,他會匹配零個或多個目錄和子目錄中搜索匹配。
glob("./src/components/**/*.js", function (er, files) {
console.log(files);
return files
});
// [ './src/components/index/index.js',
// './src/components/news/n.js',
// './src/components/news/news.js' ]
- ?:匹配路徑中某部分1個字元
glob("./src/components/**/?.js", function (er, files) {
console.log(files);
return files
});
//[ './src/components/news/n.js' ]
- !(模式1|模式2|模式3):匹配與所提供的任何模式不匹配的任何內容。和正則表示式的!一樣
案例中的意思是不要n.js 不要index.js,所以就只剩下new.js了
glob("./src/components/**/!(n|index).js", function (er, files) { console.log(files) }) // [ './src/components/news/news.js' ]
- [...] :匹配一個字元的範圍,類似於一個正則表示式的範圍。如果範圍的第一個字元是!或者,它匹配任何不在範圍內的字元
- ?(模式1|模式2|模式3):匹配所提供的模式的零或一個事件
+(模式1|模式2|模式3):匹配所提供的模式的一個或多個事件。
*(a|b|c) :匹配所提供的模式的零個或多個事件。
@(pattern|pat*|pat?erN):匹配所提供的模式之一。
使用同步語法
在上述案例中使用的都是非同步請求,呼叫回撥得到結果,其實glob也提供了同步返回結果的API ,在這裡我只列舉一個
let pattern = './src/components/**/@(index|n|news).js';
console.log(glob.sync(pattern));
// [ './src/components/index/index.js',
// './src/components/news/n.js',
// './src/components/news/news.js' ]
globby
globby,是基於 glob,並進一步得到了增強
增強特性
- Promise 介面
- 多模式匹配
- 否定模式匹配
- 擴充套件目錄: dir → dir/**/*
- 支援 .gitignore
(async () => {
const paths = await globby(['images','photos'],{
expandDirectories: true
});
console.log(paths);
})();