深入理解 Glob 模式及其在开发中的应用
Glob(Global)模式是一种简化的正则表达式语法,最初用于 Unix Shell
匹配文件路径。如今,它已成为现代 Web 开发工具链中不可或缺的一部分,被广泛应用于
Webpack, Gulp, ESLint, Prettier, VS Code
以及各类 CI/CD 配置文件(如
.gitignore
和
GitHub Actions
)中。
为什么要使用 Glob 测试工具?
在复杂的项目结构中,编写准确的路径匹配规则极具挑战性。常见的痛点包括:
-
误匹配敏感文件:
一个错误的
**/*.js可能会意外包含node_modules或生产环境的secrets.js,导致构建缓慢甚至安全漏洞。 -
排除规则失效:
!否定模式在不同工具(如picomatchvsminimatch)中的行为略有差异,导致配置不生效。 -
递归性能瓶颈:
过度使用
**会导致扫描数万个无关文件,显著拖慢 CI/CD 流程。
我们的在线测试器通过 picomatch 引擎(目前最高效的 Glob 解析器之一)实时反馈匹配结果,帮助您在应用配置前进行精准校验。
解决的具体场景
场景一:配置项目 Lint 规则。
您希望对
src
下的所有
.js
和
.ts
文件进行检查,但排除所有以
.test.
结尾的文件。您可以测试模式:
src/**/!(*.test).{js,ts}
。
场景二:Webpack 入口点扫描。
通过
**/*.entry.js
自动发现所有入口文件,确保嵌套目录下的页面也能被正确打包。
场景三:CI/CD 缓存路径。
在 GitHub Actions 中配置
cache
路径,确保只缓存
package-lock.json
所在的目录,避免缓存冗余数据。
Glob 核心语法详解
-
*(单星号): 匹配单个路径段内的任意数量字符。例如*.js匹配app.js,但不匹配src/app.js。 -
**(双星号): 匹配零个或多个目录。例如src/**/*.js会深度递归查找src下所有的 JavaScript 文件。 -
{}(大括号): 用于创建扩展组。{js,ts}匹配js或ts后缀。 -
[](中括号): 匹配字符集合。[0-9]匹配任何数字位。 -
!(感叹号): 用于取反。注意在许多实现中,取反模式通常需要放在一个列表的末尾或作为独立规则。
如何使用本工具?
1. 输入模式: 在左侧输入框填写您的 Glob 规则。工具会自动为您解析并生成人类可读的语法说明。
2. 列出路径: 将您的项目文件结构(部分)粘贴到下方文本框。建议包含一些您希望匹配和希望排除的临界路径。
3. 观察反馈: 右侧会实时通过 绿色(匹配)和 灰色(未匹配)标签显示结果,并统计命中率。
4. 分享: 点击“分享测试”可生成包含当前配置的加密链接,方便与同事讨论或记录配置方案。