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

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

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


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...
    })
  )
}
目录
相关文章
|
3月前
|
负载均衡 监控 JavaScript
pm2 工具在 Node.js 开发和部署中的重要作用
pm2 工具在 Node.js 开发和部署中的重要作用
43 0
|
4月前
|
JavaScript 数据管理
Node.js 文件系统的各种用法和常见场景
Node.js 文件系统的各种用法和常见场景
48 1
|
4月前
|
缓存 JavaScript 前端开发
猿如意中的【Node.js】工具详情介绍
猿如意中的【Node.js】工具详情介绍
|
2月前
|
JavaScript
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
27 0
|
3月前
|
JavaScript
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)(上)
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
29 0
|
3月前
|
JavaScript
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)(下)
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
25 0
|
6月前
|
存储 JavaScript Unix
什么是 Node.js 的 cross-env 工具包
什么是 Node.js 的 cross-env 工具包
47 0
|
2月前
|
监控 JavaScript 前端开发
Node.js:JavaScript世界的全能工具
Node.js:JavaScript世界的全能工具
77 0
|
2月前
|
资源调度 JavaScript 关系型数据库
Node.js【文件系统模块、路径模块 、连接 MySQL、nodemon、操作 MySQL】(三)-全面详解(学习总结---从入门到深化)
Node.js【文件系统模块、路径模块 、连接 MySQL、nodemon、操作 MySQL】(三)-全面详解(学习总结---从入门到深化)
33 0
|
2月前
|
JavaScript 前端开发 API
Node.js 工具库 yeoman 的作用介绍
Node.js 工具库 yeoman 的作用介绍
31 0