nodejs之glob与globby

glob

glob容许使用规则,从而获取对应规则匹配的文件。这个glob工具基于javascript.它使用了 minimatch 库来进行匹配javascript

安装
npm install glob
引入
const glob = require('glob')
使用

glob方法能够传入三个参数:java

一、须要进行匹配的文件的路径(有点相似于正则表达式)。
二、option可选项,也能够不填写。
三、回调函数,回调函数内部能够返回两个参数,一个是匹配成功后的结果会返回一个数组,若是没有匹配上不会报错会返回一个空数组,一个是失败后的结果。

示例
glob("**/*.js", options, function (er, files) {
  console.log(files)
})
经常使用匹配规则
    • :匹配单个路径部分中的0个或多个字符。
  1. :若是在一个路径的部分,他会匹配零个或多个目录和子目录中搜索匹配。
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. ?:匹配路径中某部分1个字符
glob("./src/components/**/?.js", function (er, files) {
    console.log(files);
    return files
});
//[ './src/components/news/n.js' ]
  1. !(模式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. [...] :匹配一个字符的范围,相似于一个正则表达式的范围。若是范围的第一个字符是!或者,它匹配任何不在范围内的字符git

  2. ?(模式1|模式2|模式3):匹配所提供的模式的零或一个事件正则表达式

  3. +(模式1|模式2|模式3):匹配所提供的模式的一个或多个事件。npm

  4. *(a|b|c) :匹配所提供的模式的零个或多个事件。数组

  5. @(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

globby,是基于 glob,并进一步获得了加强函数

加强特性
  1. Promise 接口
  2. 多模式匹配
  3. 否认模式匹配
  4. 扩展目录: dir → dir/**/*
  5. 支持 .gitignore
(async () => {
  const paths = await globby(['images','photos'],{
    expandDirectories: true
  });
  console.log(paths);
})();
不想写了,本身查官方文档去
相关文章
相关标签/搜索