Glob Pattern:方便、快捷地查询你项目中的所有文件
简介
Glob Pattern 是一套查询系统中文件的语法,类似于正则表达式,但又与正则表达式不同。Glob Pattern 最开始起源于 Unix 系统 Shell 命令行脚本。以 cp *.jpg ./thumbnails
举例——这句指令表示复制当前目录内所有以 .jpg
结尾的文件到 thumbnails/
目录中,语法很简洁。

由于 Glob Pattern 这套匹配文件的语法太好用了,因此各个编程语言都有自己的一套。在前端领域 Node.js 平台,比较有代表性实现包有:glob
、fast-glob
和 globby
。不过从下载量上来看,glob
是最受欢迎的,如果你的项目需要用到查询文件的需求,可以优先考虑使用 glob
。
语法
Glob Pattern 相当于正则表达式,语法没那么复杂,因为 Glob Pattern 的目的很简单,就是为了匹配文件——没有目录什么事。下面我们就来学习下 Glob Pattern 的语法。
?
:匹配任意一个字符*
:匹配任意长度的字符串/
:匹配一个路径分隔符**
:这个就比较有意思了,Glob Pattern 中它有个专有名词叫 globstar。一共有两种使用方式:单独(即**
)使用时匹配任意层级下的所有文件;后面跟路径分隔符(即**/
)时,匹配任意层级的目录。/myapp/**.js
是无效用法{a,b}
:是一个延展语法,Glob Pattern 中它有个专有名词叫 brace expansion,会讲当前的 Glob Pattern 扩展成多个单独的形式。{}
内有两种分隔符号可以使用,分别是逗号(,
)和两点(..
)。
比如:
**/*.{b,c}
会被扩展为**/.b
和**/.c
,最终的结果也是这两个 Pattern比如:
**/{a..c}
会被扩展为**/.a
、**/.b
和**/.c
!(a|b)
:一个扩展语法,表示排除(!
)圆括号(()
)里可能的值
练习
以下截图来自 globster.xyz(https://globster.xyz/)站点,这是一个不错的学习 Glob Pattern 语法的在线站点。感兴趣的同学访问尝试下。
我们以这样一个项目结构为例:

**/*.js
匹配项目中的任意 js 文件。

同理,匹配项目中的所有的 png 图片就是 **/*.png
。

/myapp/config/*
匹配 config/
目录下的所有文件。

**/*.{png,ico,md}
匹配所有的 png、ico 和 Markdown 文件。

/myapp/src/**/*.ts
匹配 src
目录下所有的 ts 文件。

**/!(*.module).ts
匹配所有的 .ts
文件,但排除以 .module.ts
结尾的文件。

glob
的使用
下面我们简单了解下 glob 包的使用。
安装依赖:
引入 glob
查询方法:
使用:
总结
以上就是关于 Glob Pattern 的所有内容。如果你的工作中有涉及文件查找工作,建议尝试下 glob
下看看,会让你的查找更有效率,代码也更加简洁。