NodeJS文件系统遍历工具:fast-glob

常用工具模块
NodeJS文件系统遍历工具:fast-glob

jcLee95:https://blog.csdn.net/qq_28550263?spm=1001.2101.3001.5343
邮箱 :[email protected]
本文地址:https://blog.csdn.net/qq_28550263/article/details/129892856


目 录

  • 1. 简介
  • 2. glob 语法
    • 2.1 什么是 glob
    • 2.2 glob 语法规则详解
    • 2.2.1 glob 通配符: `*`
    • 2.2.2 单个字符匹配 `?`
    • 2.2.3 列表匹配 `[ABCD]`
    • 2.2.4 列表排除 `[!ABCD]`
    • 2.2.5 区间匹配 `[a-z]`、`[A-Z]`、`[0-9]`
    • 2.2.6 区间排除 `[!a-z]`、`[!A-Z]`、`[!0-9]`
  • 3. fast-glob 的用法
    • 3.1 使用同步 API
      • 3.1.1 同步 API 的接口形式
      • 3.1.2 例子
    • 3.2 使用 Promise API
      • 3.2.1 Promise API 的接口形式
      • 3.2.2 例子


1. 简介

fast-glob 提供了遍历文件系统的方法,并根据 Unix Bash shell 使用的规则返回与一组定义的指定模式匹配的路径名,并进行了一些简化,同时以任意顺序返回结果。它支持同步、Promise 和 Stream API。

2. glob 语法

2.1 什么是 glob

glob 是一种由普简便的用于匹配文件路径的方法,可以通过它在文件系统中方便的指定和筛选文件。

2.2 glob 语法规则详解

2.2.1 glob 通配符: *

和很多其它地方一样,glog 使用 * 作为通配符以匹配任意数量的任何字符。举个例子来说:

"src/*.js"    // 匹配 src 目录下的所有后缀名为 js 的文件
"src/**"      // 匹配 src 目录下的所有文件
"src/**/*.ts" // 匹配 src 目录下任意子目录下的后缀名为 ts 的文件

2.2.2 单个字符匹配 ?

?用于匹配该限定符前的字符0或1次,与正则表达式中的?类似,但是一般glob是表示该符号后面的那个字符。

2.2.3 列表匹配 [ABCD]

列表匹配同于匹配[]中列出的所有字母,比如:

"[ABCD]"  // A、B、C、D 的任意一个都会被匹配成功

2.2.4 列表排除 [!ABCD]

列表排除用于匹配除了[]中列出的字符外的所有字符,与正则表达式的列表排除类似,只是正则表达式用的^换成了!
例如:

"[!ABCD]"  // A、B、C、D 之外的字符才能被匹配成功

2.2.5 区间匹配 [a-z][A-Z][0-9]

例如:

"[g-j]"  // 匹配字符 g 、h、i、j
"[C-F]"  // 匹配字符 C、D、E、F
"[3-7]"  // 匹配字符 3、4、5、6、7

2.2.6 区间排除 [!a-z][!A-Z][!0-9]

区间排除用于匹配除了[]中所表示的区间内所有字符以外的任意字符,与正则表达式的列表排除类似,只是正则表达式用的^换成了!

例如:

"[5-7]"  // 匹配除 5、6、7 以外的任意字符 

3. fast-glob 的用法

3.1 使用同步 API

3.1.1 同步 API 的接口形式

fg.sync(patterns, [options])

3.1.2 例子

例如你有这样一个目录树:

dir/
└── one/            // 1
    └── two/        // 2
        └── file.js // 3
import fg from 'fast-glob'

// 基本目录
fg.sync('dir/**', { onlyFiles: false, deep: 1 }); // ['dir/one']
fg.sync('dir/**', { onlyFiles: false, deep: 2 }); // ['dir/one', 'dir/one/two']

// 使用 cwd 选项
fg.sync('**', { onlyFiles: false, cwd: 'dir', deep: 1 }); // ['one']
fg.sync('**', { onlyFiles: false, cwd: 'dir', deep: 2 }); // ['one', 'one/two']

其中:

  • deep 选项 表示指定读取目录相对于起始目录的最大深度;
  • cwd 选项(默认为process.cwd())表示要在其中搜索的当前工作目录。

3.2 使用 Promise API

3.2.1 Promise API 的接口形式

fg(patterns, [options])

3.2.2 例子

import glob from 'fast-glob'

async function buildFullLocale(minify: boolean) {
  const files = await glob(`**/*.ts`, {
    cwd: path.resolve(PKG_LOCALE, 'lang'),
    absolute: true,
  })
  return Promise.all(
    files.map(async (file) => {
      const filename = path.basename(file, '.ts')
      const name = upperFirst(camelCase(filename))
      // Do something...
    })
  )
}

你可能感兴趣的:(大前端,NodeJS,express,koa开发笔记,编程小工具与小技巧,正则表达式,glob,工具模块,NodeJS,fast-glob)