glob容許使用規則,從而獲取對應規則匹配的文件。這個glob工具基於javascript.它使用了 minimatch 庫來進行匹配javascript
npm install glob
const glob = require('glob')
glob方法能夠傳入三個參數:java
一、須要進行匹配的文件的路徑(有點相似於正則表達式)。 二、option可選項,也能夠不填寫。 三、回調函數,回調函數內部能夠返回兩個參數,一個是匹配成功後的結果會返回一個數組,若是沒有匹配上不會報錯會返回一個空數組,一個是失敗後的結果。 示例 glob("**/*.js", options, function (er, files) { console.log(files) })
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' ]
glob("./src/components/**/?.js", function (er, files) { console.log(files); return files }); //[ './src/components/news/n.js' ]
glob("./src/components/**/!(n|index).js", function (er, files) { console.log(files) }) // [ './src/components/news/news.js' ]
[...] :匹配一個字符的範圍,相似於一個正則表達式的範圍。若是範圍的第一個字符是!或者,它匹配任何不在範圍內的字符git
?(模式1|模式2|模式3):匹配所提供的模式的零或一個事件正則表達式
+(模式1|模式2|模式3):匹配所提供的模式的一個或多個事件。npm
*(a|b|c) :匹配所提供的模式的零個或多個事件。數組
@(pattern|pat*|pat?erN):匹配所提供的模式之一。異步
在上述案例中使用的都是異步請求,調用回調獲得結果,其實glob也提供了同步返回結果的API ,在這裏我只列舉一個async
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,是基於 glob,並進一步獲得了加強函數
(async () => { const paths = await globby(['images','photos'],{ expandDirectories: true }); console.log(paths); })();