@bluelovers/fast-glob

中文文档
3.0.4发布于 2019/07/06ISCTypeScriptCommonJS近 30 天下载 7.6万

fast-glob 的旧打字符 api

中文使用文档
文档目录29 节
  1. 这个叉子
  2. 使用量
  3. 目录
  4. 要点
  5. 捐款
  6. 老式和现代式
  7. 模式语法
  8. 基本语法
  9. 高级语法
  10. 安装
  11. API 密码
  12. 同步
  13. 同步
  14. 流线
  15. 选项
  16. 共同选项
  17. 输出控制
  18. 匹配控件
  19. 财务问题
  20. 如何在 Windows 上写入模式 ?
  21. 为什么括号里是错的?
  22. 如何将目录排除在阅读之外?
  23. 如何使用UNC路径?
  24. 兼容 node-glob ? 吗?
  25. 基准
  26. 服务器
  27. 净盘
  28. 更改日志
  29. 许可证

快速块

这是非常快和有效率的 阴影 用于 节点.js。 。 。 .

此软件包提供了对文件系统和返回路径名进行翻转的方法,这些路径名按照Unix Bash shell使用的规则与定义的一组指定模式相匹配,并附有一些简化,同时返回结果 任意命令快速,简单,有效.

这个叉子

叉从 https://github.com/mrmlnc/fast-glob 页面存档备份,存于互联网档案馆

  • 导出 async, (中文(简体) ), default
  • 允许旧的打字符 api async<T>, (中文(简体) ), sync<T>
  • 包装到 bluebird (备选)

使用量

基础

import FastGlob, { Options, EntryItem } from '@bluelovers/fast-glob';

蓝鸟

import FastGlob, { Options, EntryItem } from '@bluelovers/fast-glob/bluebird';

使用其他青鸟类或任何带有混音方法的物体

const promisify = require('@bluelovers/fast-glob/util').promisify;
const Bluebird = require("bluebird");
const FastGlob = promisify(require('@bluelovers/fast-glob'));

// use other Bluebird like or any object with promisify method
const FastGlob = promisify(require('@bluelovers/fast-glob'), Bluebird);
const my_promisify = (fn) => {
 return function (...argv)
 {
  return Promise.resolve().then(function ()
  {
   return fn(...argv)
  })
 }
}

const FastGlob = promisify(require('@bluelovers/fast-glob'), my_promisify);

const FastGlob = promisify(require('@bluelovers/fast-glob'), {
    promisify: my_promisify
});

目录

细节

要点

  • 快点 也许最快.
  • 支持多与负模式.
  • 同步,承诺和流 API.
  • 对象模式 。 不止是绳子能还回来.
  • 容忍错误.

捐款

你喜欢这个项目吗? 通过捐赠,创建问题或拉出请求来支持.

Donate

老式和现代式

这个软件包工作有两种模式,这取决于其使用的环境.

  • 旧模式10.10下节点或 stats 选项 启用。 。 。 .
  • 现代模式节点.js 10.10+和 stats 选项 已禁用。 。 。 .

现代模式更快. 学习更多关于 内部机制。 。 。 .

模式语法

:警告:在光标表达式中总是使用前鞭打(patters和 ignore 选项)。 用回鞭来逃出字符 .

语法有多种形式:基础和高级. 下文简要概述所支持的特征。 还要注意我们 财务问题。 。 。 .

:书: 此软件包使用一个 micromatch 作为图案匹配的库.

基本语法

  • 星号*) — 匹配除划线( 路径分隔符) 、 隐藏文件( 名称从 .) (中文(简体) ).
  • 双星或光子星(**) — 匹配零或更多目录.
  • 问号?) – 匹配除鞭打外的任何单个字符(路径分隔符).
  • 顺序( N)[seq])——相匹配任何字符的序列.

: 书: 关于: 基本匹配行为。 。 。 .

一些例子:

  • src/**/*.js ——匹配其中的所有文件 src 目录( 任何水平的巢穴) .js 扩展名.
  • src/*.?? ——匹配其中的所有文件 src 目录(只包含第一级巢穴)具有双特征扩展.
  • file-[01].js 匹配文件 : file-0.js, (中文(简体) ), file-1.js。 。 。 .

高级语法

: 书: 关于: 高级匹配行为。 。 。 .

一些例子:

  • src/**/*.{css,scss) ——匹配其中的所有文件 src 目录( 任何水平的巢穴) .css 或者说 .scss 扩展名.
  • file-[[:digit:]].js 匹配文件 : file-0.js, (中文(简体) ), file-1.js. . . . . . . , file-9.js。 。 。 .
  • file-{1..3}.js 匹配文件 : file-1.js, (中文(简体) ), file-2.js, (中文(简体) ), file-3.js。 。 。 .
  • file-(1|2) 匹配文件 : file-1.js, (中文(简体) ), file-2.js。 。 。 .

安装

npm install fast-glob

API 密码

同步

fg(patterns, [options])

回返a Promise 带有一系列匹配条目.

const fg = require('fast-glob');

const entries = await fg(['.editorconfig', '**/index.js'], { dot: true });

// ['.editorconfig', 'services/index.js']

同步

fg.sync(patterns, [options])

返回一组匹配条目.

const fg = require('fast-glob');

const entries = fg.sync(['.editorconfig', '**/index.js'], { dot: true });

// ['.editorconfig', 'services/index.js']

流线

fg.stream(patterns, [options])

回返a ReadableStream 当 data 事件将随匹配条目而释放.

const fg = require('fast-glob');

const stream = fg.sync(['.editorconfig', '**/index.js'], { dot: true });

for await (const entry of stream) {
    // .editorconfig
    // services/index.js
}

模式

  • 要求 : true
  • 类型 : string | string[]

任何正确的模式.

:1234: (英语) 模式语法

:警告:这个包不尊重图案的顺序. 首先,所有消极规律都应用,只有这样,才应用正规律. 如果要获得一定的记录顺序,请使用排序或分打.

[可选

见 选项 节.

选项

共同选项

货币

  • 类型 : number
  • 默认 : os.cpus().length

指定阅读器对读取目录的同步请求的最大数量.

:book:数字越多,文件系统中的性能和负载就越多. 如果您想以静默模式阅读, 请将值设置为舒适的数或 1。 。 。 .

数据

  • 类型 : string
  • 默认 : process.cwd()

当前搜索的工作目录 .

深处

  • 类型 : number
  • 默认 : Infinity

指定相对于起始目录的读取目录的最大深度.

例如,您有以下树:

dir/
└── one/            // 1
    └── two/        // 2
        └── file.js // 3
// With base directory
fg.sync('dir/**', { onlyFiles: false, deep: 1 }); // ['dir/one']
fg.sync('dir/**', { onlyFiles: false, deep: 2 }); // ['dir/one', 'dir/one/two']

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

:书: 如果您指定了带有一些碱性目录的图案,此目录将不参与所找到目录深度的计算. 把它当作一个 cwd 选项.

  • 类型 : boolean
  • 默认 : true

表示是否穿越符号链接目录的后人.

:书:如果 stats 选项中指定符号链接的信息(fs.lstat将替换为条目信息(fs.stat{\fn华文仿宋\fs16\1chd1d1d1}在后面.

小时

  • 类型 : FileSystemAdapter
  • 默认 : fs.*

自定义文件系统工作方法的执行 .

export interface FileSystemAdapter {
    lstat?: typeof fs.lstat;
    stat?: typeof fs.stat;
    lstatSync?: typeof fs.lstatSync;
    statSync?: typeof fs.statSync;
    readdir?: typeof fs.readdir;
    readdirSync?: typeof fs.readdirSync;
}

忽略

  • 类型 : string[]
  • 默认 : []

排除匹配的一连串光彩图案 。 这是使用负面模式的另一种方式.

dir/
├── package-lock.json
└── package.json
fg.sync(['*.json', '!package-lock.json']);            // ['package.json']
fg.sync('*.json', { ignore: ['package-lock.json'] }); // ['package.json']

压制错误

  • 类型 : boolean
  • 默认 : false

默认情况下, 此软件包只压制 ENOENT 错误。 设定为 true 以压制任何错误.

: book:当目录有特殊访问级别的条目时,可以有用.

  • 类型 : boolean
  • 默认 : false

当符号链接被打破时丢出错误( 如果 true 或安全返回 lstat 如果 false。 。 。 .

:书: 此选项对读取符号链接目录时的错误没有影响 .

输出控制

绝对

  • 类型 : boolean
  • 默认 : false

返回条目的绝对路径 .

fg.sync('*.js', { absolute: false }); // ['index.js']
fg.sync('*.js', { absolute: true });  // ['/home/user/index.js']

:书: 如果您想要使用带有绝对路径的负模式, 需要此选项, 例如 , !${__dirname}/*.js。 。 。 .

标记目录

  • 类型 : boolean
  • 默认 : false

用最后斜线标记目录路径 .

fs.sync('*', { onlyFiles: false, markDirectories: false }); // ['index.js', 'controllers']
fs.sync('*', { onlyFiles: false, markDirectories: true });  // ['index.js', 'controllers/']

对象模式

  • 类型 : boolean
  • 默认 : false

返回描述条目的对象(而不是字符串).

fg.sync('*', { objectMode: false }); // ['src/index.js']
fg.sync('*', { objectMode: true });  // [{ name: 'index.js', path: 'src/index.js', dirent: <fs.Dirent> }]

本天体有以下字段:

  • 名称( e)string)——路径的最后部分(基名)
  • 路径( r)string) – 相对于模式基目录的完整路径
  • 双层fs.Dirent() 实例 fs.Direct

:书: 一个物体是条目的内部表示,所以获取它不影响性能.

仅指董事

  • 类型 : boolean
  • 默认 : false

只返回目录 .

fg.sync('*', { onlyDirectories: false }); // ['index.js', 'src']
fg.sync('*', { onlyDirectories: true });  // ['src']

: 书:如果 true,则 onlyFiles 选项是自动 false。 。 。 .

仅文件

  • 类型 : boolean
  • 默认 : false

只返回文件 .

fg.sync('*', { onlyFiles: false }); // ['index.js', 'src']
fg.sync('*', { onlyFiles: true });  // ['index.js']

数据

  • 类型 : boolean
  • 默认 : false

启用一个 对象模式 附加字段:

fg.sync('*', { stats: false }); // ['src/index.js']
fg.sync('*', { stats: true });  // [{ name: 'index.js', path: 'src/index.js', dirent: <fs.Dirent>, stats: <fs.Stats> }]

: 书: 返回 fs.stat 改为 fs.lstat 符号链接 followSymbolicLinks 选项.

: 警告: 与 对象模式 此模式需要额外调用文件系统 。 平均来说,这种模式至少慢了两次. 见 旧模式和现代模式 更多细节.

独一无二

  • 类型 : boolean
  • 默认 : true

确保返回的条目是独一无二的.

fg.sync(['*.json', 'package.json'], { unique: false }); // ['package.json', 'package.json']
fg.sync(['*.json', 'package.json'], { unique: true });  // ['package.json']

若为 true 并找到类似的条目,结果为第一个找到.

匹配控件

缩放

  • 类型 : boolean
  • 默认 : true

启用类似 Bash 的牙套扩展 .

:1234: (英语) 语法描述 或超过 详细说明。 。 。 .

dir/
├── abd
├── acd
└── a{b,c}d
fg.sync('a{b,c}d', { braceExpansion: false }); // ['a{b,c}d']
fg.sync('a{b,c}d', { braceExpansion: true });  // ['abd', 'acd']

区分大小写

  • 类型 : boolean
  • 默认 : true

启用 a 区分大小写 匹配文件的模式.

dir/
├── file.txt
└── File.txt
fg.sync('file.txt', { caseSensitiveMatch: false }); // ['file.txt', 'File.txt']
fg.sync('file.txt', { caseSensitiveMatch: true });  // ['file.txt']

点

  • 类型 : boolean
  • 默认 : false

允许模式匹配从某一时期开始的条目(.) (中文(简体) ).

:book:注意在图案的一部分中,一个明确的点将永远匹配点文件.

dir/
├── .editorconfig
└── package.json
fg.sync('file.txt', { dot: false }); // ['package.json']
fg.sync('file.txt', { dot: true });  // ['.editorconfig', 'package.json']

外观

  • 类型 : boolean
  • 默认 : true

启用类似 Bash 的 extglob 函数.

:1234: (英语) 语法描述。 。 。 .

dir/
├── README.md
└── package.json
fg.sync('*.+(json|md)', { extglob: false }); // []
fg.sync('*.+(json|md)', { extglob: true });  // ['README.md', 'package.json']

光荣之星

  • 类型 : boolean
  • 默认 : true

允许递归重复包含的图案 **如果 false, (中文(简体) ), ** 行为就像 *。 。 。 .

dir/
└── a
    └── b
fg.sync('**', { onlyFiles: false, globstar: false }); // ['a']
fg.sync('**', { onlyFiles: false, globstar: true });  // ['a', 'a/b']

基础Name 匹配

  • 类型 : boolean
  • 默认 : false

如果设置为 true,那么,如果路径含有斜线,则没有斜线的图案将会与路径的基名相匹配.

dir/
└── one/
    └── file.md
fg.sync('*.md', { baseNameMatch: false }); // []
fg.sync('*.md', { baseNameMatch: true });  // ['one/file.md']

财务问题

如何在 Windows 上写入模式 ?

在光彩表达式中总是使用向前鞭打( patters and ignore 选项)。 用回鞭来逃出字符 。 与 cwd 选项使用方便的格式.

坏东西

[
    'directory\\*',
    path.join(process.cwd(), '**')
]

不错

[
    'directory/*',
    path.join(process.cwd(), '**').replace(/\\/g, '/')
]

: 书:使用 normalize-path 或 unixify 包将 Windows 风格的路径转换为 Unix 风格的路径.

更多信息 与后鞭相匹配。 。 。 .

为什么括号里是错的?

dir/
└── (special-*file).txt
fg.sync(['(special-*file).txt']) // []

指巴什语. 你需要逃脱特殊的角色:

fg.sync(['\\(special-*file\\).txt']) // ['(special-*file).txt']

更多信息 将特殊字符匹配为文字。 。 。 .

如何将目录排除在阅读之外?

您可以使用这样的负图案 : !**/node_modules 或者说 !**/node_modules/**。还可以使用 ignore 选项。 看看下面的例子.

first/
├── file.md
└── second/
    └── file.txt

如果你不想读 second 目录中,您必须写入以下模式: !**/second 或者说 !**/second/**。 。 。 .

fg.sync(['**/*.md', '!**/second']);                 // ['first/file.md']
fg.sync(['**/*.md'], { ignore: ['**/second/**'] }); // ['first/file.md']

: 警告: 当您写时 !**/second/**/* 这意味着目录将会是 读取,但所有条目将不会包含在结果中.

你必须明白,如果写出图案以排除目录,那么该目录在任何情况下都不会被读取.

如何使用UNC路径?

您无法使用 《统一名称公约》 路径作为图案(由于语法原因),但可以用作 cwd 目录.

fg.sync('*', { cwd: '\\\\?\\C:\\Python27' /* or //?/C:/Python27 */ });
fg.sync('Python27/*', { cwd: '\\\\?\\C:\\' /* or //?/C:/ */ });

兼容 node-glob? 吗?

节点- glob快速块
cwdcwd
root– 说吧 –
dotdot
nomount– 说吧 –
markmarkDirectories
nosort– 说吧 –
nouniqueunique
nobracebraceExpansion
noglobstarglobstar
noextextglob
nocasecaseSensitiveMatch
matchBasebaseNameMatch
nodironlyFiles
ignoreignore
followfollowSymbolicLinks
realpath– 说吧 –
absoluteabsolute

基准

服务器

链接 : 裸体金属

你可以看到结果 这里 为最新发布.

净盘

链接 : Zotac bi323 (英语)

你可以看到结果 这里 为最新发布.

更改日志

见 我们的GitHub项目的发布部分 每个版本的更改日志.

许可证

本软件以麻省理工学院许可条款发布.

版本与发布记录

@bluelovers/fast-glob 共发布 3 个版本,首次发布于 2019/06/27;过去 12 个月发布了 0 个版本。

版本发布日期距今
3.0.4latest2019/07/067 年前
3.0.32019/06/277 年前
3.0.22019/06/277 年前

关于 @bluelovers/fast-glob 的常见问题

@bluelovers/fast-glob 是什么?

fast-glob 的旧打字符 api

如何安装 @bluelovers/fast-glob?

在项目目录运行 npm install @bluelovers/fast-glob,或使用 pnpm add / yarn add / bun add。

@bluelovers/fast-glob 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@bluelovers/fast-glob 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@bluelovers/fast-glob 可以商用吗?

@bluelovers/fast-glob 使用 ISC 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@bluelovers/fast-glob 的下载量有多少?

根据 npm 官方下载统计,@bluelovers/fast-glob 在 2026/10/09 – 2026/11/07 这 30 天内被下载 75,926 次,日均约 2,531 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@bluelovers/fast-glob 还在维护吗?

最新版本 3.0.4 发布于 2019/07/06(7 年前);至今共发布 3 个版本,其中过去 12 个月发布了 0 个;首次发布于 2019/06/27。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。