為什么需要 fast-glob?
在前端工程化場景中,文件匹配是高頻操作:自動化構建、資源打包、靜態資源管理等都依賴高效的路徑匹配。傳統的 node-glob
雖然功能齊全,但性能瓶頸明顯。fast-glob
應運而生——它以 極簡 API 和 超高性能(官方稱比 node-glob
快 350%)成為新一代文件匹配工具。它的周下載量也達到了恐怖的6千萬,可見他的受歡迎程度。
二、核心優勢
1. 閃電般的速度
- 基于
micromatch
和picomatch
算法優化,減少冗余遍歷。 - 支持并行文件系統遍歷,充分利用多核 CPU。
2. 簡潔的 API 設計
- 同步(
sync
)與異步(async
)雙模式,適應不同場景需求。 - 支持動態模式匹配(如
**/*.js
)、忽略規則(.gitignore
語義)。
3. 無縫集成主流工具鏈
- 被 Vite、Webpack 插件(如
vite-plugin-svg-icons
)深度采用,用于自動化文件收集。
三、快速上手
1. 安裝
npm install fast-glob
2. 基礎用法
const fg = require('fast-glob'); // 異步匹配所有 JS 文件
fg.async(['**/*.js', '!node_modules/**']) .then(files => console.log(files)); // 同步模式(適用于腳本類場景)
const files = fg.sync('src/**/*.{ts,tsx}');
3. 高級配置
fg.sync('**/*.svg', { cwd: 'src/assets', // 指定根目錄 ignore: ['**/test/**'], // 忽略路徑 absolute: true, // 返回絕對路徑 dot: true, // 包含隱藏文件 stats: true // 獲取文件元信息(大小、時間等)
});
四、實戰場景
1. Vite 插件開發:自動收集 SVG 圖標
在 vite.config.js
中結合 vite-plugin-svg-icons
實現圖標自動化:
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons';
import fg from 'fast-glob'; export default { plugins: [ createSvgIconsPlugin({ iconDirs: fg.sync('src/icons/**/*.svg', { absolute: true }) }) ]
}
2. 構建工具:批量處理多目錄文件
// 匹配 src/pages 下所有 HTML 文件
const pages = fg.sync('src/pages/**/*.html');
pages.forEach(html => generateRoute(html));
五、性能對比
工具 | 10,000文件耗時 | 特點 |
---|---|---|
node-glob | 1.2s | 功能全,速度較慢 |
tiny-glob | 0.8s | 輕量但功能受限 |
fast-glob | 0.3s | 高性能 + 完整功能 |
六、最佳實踐
1. 模式語法規范
*
匹配任意字符,?匹配單個字符,**匹配多級目錄。- 示例:
src/**/*.{js,ts}
匹配所有 JS 和 TS 文件。
1. 避免過度匹配
- 使用
ignore
選項排除node_modules
等目錄。 - 結合
.gitignore
規則(通過gitignore: true
配置)
七、總結
fast-glob
以其 極簡的 API、碾壓級的性能,成為前端工程化中文件匹配的首選工具。無論是構建工具開發、靜態資源管理,還是自動化腳本,它都能顯著提升效率。
延伸閱讀
- Glob 模式語法詳解
- Vite 生態中的文件匹配實戰
- fast-group - npm