快速块
此软件包提供了对文件系统和返回路径名进行翻转的方法,这些路径名按照Unix Bash shell使用的规则与定义的一组指定模式相匹配,并附有一些简化,同时返回结果 任意命令快速,简单,有效.
这个叉子
- 导出
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.
- 对象模式 。 不止是绳子能还回来.
- 容忍错误.
捐款
你喜欢这个项目吗? 通过捐赠,创建问题或拉出请求来支持.
老式和现代式
这个软件包工作有两种模式,这取决于其使用的环境.
现代模式更快. 学习更多关于 内部机制。 。 。 .
模式语法
:警告:在光标表达式中总是使用前鞭打(patters和
ignore选项)。 用回鞭来逃出字符 .
语法有多种形式:基础和高级. 下文简要概述所支持的特征。 还要注意我们 财务问题。 。 。 .
:书: 此软件包使用一个
micromatch作为图案匹配的库.
基本语法
- 星号
*) — 匹配除划线( 路径分隔符) 、 隐藏文件( 名称从.) (中文(简体) ). - 双星或光子星(
**) — 匹配零或更多目录. - 问号
?) – 匹配除鞭打外的任何单个字符(路径分隔符). - 顺序( N)
[seq])——相匹配任何字符的序列.
: 书: 关于: 基本匹配行为。 。 。 .
一些例子:
src/**/*.js——匹配其中的所有文件src目录( 任何水平的巢穴).js扩展名.src/*.??——匹配其中的所有文件src目录(只包含第一级巢穴)具有双特征扩展.file-[01].js匹配文件 :file-0.js, (中文(简体) ),file-1.js。 。 。 .
高级语法
- 逃脱字符 (单位:千美元)
\\) ——匹配特殊字符($^*+?()[])为字. - POSIX 字符类 (单位:千美元)
[[:digit:]]) (中文(简体) ). - 扩展缩略语 (单位:千美元)
?(pattern-list)) (中文(简体) ). - 巴什风格缩放 (单位:千美元)
{}) (中文(简体) ). - 描述字符类 (单位:千美元)
[1-5]) (中文(简体) ). - Regex 组 (单位:千美元)
(a|b)) (中文(简体) ).
: 书: 关于: 高级匹配行为。 。 。 .
一些例子:
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: (英语) 模式语法
:警告:这个包不尊重图案的顺序. 首先,所有消极规律都应用,只有这样,才应用正规律. 如果要获得一定的记录顺序,请使用排序或分打.
[可选
- 要求 :
false - 类型 :
Options
见 选项 节.
选项
共同选项
货币
- 类型 :
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
启用一个 对象模式 附加字段:
- 数据(
fs.Stats() 实例fs.Stats
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 的牙套扩展 .
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 | 快速块 |
|---|---|
cwd | cwd |
root | – 说吧 – |
dot | dot |
nomount | – 说吧 – |
mark | markDirectories |
nosort | – 说吧 – |
nounique | unique |
nobrace | braceExpansion |
noglobstar | globstar |
noext | extglob |
nocase | caseSensitiveMatch |
matchBase | baseNameMatch |
nodir | onlyFiles |
ignore | ignore |
follow | followSymbolicLinks |
realpath | – 说吧 – |
absolute | absolute |
基准
服务器
链接 : 裸体金属
- 处理器: E3-1270v6 (8 CPU)
- 内存: 32GB
- 磁盘: SSD (DC S3520 SSDSC2BB240G7 英特尔(中文(简体) )
你可以看到结果 这里 为最新发布.
净盘
链接 : Zotac bi323 (英语)
- 处理器:Intel N3150 (4 CPU)
- 内存: 8GB
- 磁盘: SSD (硅动力 SP060GBSS3S55S25(中文(简体) )
你可以看到结果 这里 为最新发布.
更改日志
见 我们的GitHub项目的发布部分 每个版本的更改日志.
许可证
本软件以麻省理工学院许可条款发布.