前端工程化利器:Node.js 文件匹配库 fast-glob 完全指南——比传统方案快 350% 的「文件搜索神器」

为什么需要 fast-glob?

在前端工程化场景中,文件匹配 是高频操作:自动化构建、资源打包、静态资源管理等都依赖高效的路径匹配。传统的 node-glob 虽然功能齐全,但性能瓶颈明显。fast-glob 应运而生------它以 极简 API超高性能 (官方称比 node-glob 快 350%)成为新一代文件匹配工具。它的周下载量也达到了恐怖的6千万,可见他的受欢迎程度。

二、核心优势

1. 闪电般的速度

  • 基于 micromatchpicomatch 算法优化,减少冗余遍历。
  • 支持并行文件系统遍历,充分利用多核 CPU。

2. 简洁的 API 设计

  • 同步(sync)与异步(async)双模式,适应不同场景需求。
  • 支持动态模式匹配(如 **/*.js)、忽略规则(.gitignore 语义)。

3. 无缝集成主流工具链

  • 被 Vite、Webpack 插件(如 vite-plugin-svg-icons)深度采用,用于自动化文件收集。

三、快速上手

1. 安装

shell 复制代码
npm install fast-glob

2. 基础用法

javascript 复制代码
const fg = require('fast-glob');  

// 异步匹配所有 JS 文件  
fg.async(['**/*.js', '!node_modules/**'])  
  .then(files => console.log(files));  

// 同步模式(适用于脚本类场景)  
const files = fg.sync('src/**/*.{ts,tsx}');

3. 高级配置

javascript 复制代码
fg.sync('**/*.svg', {  
  cwd: 'src/assets',          // 指定根目录  
  ignore: ['**/test/**'],      // 忽略路径  
  absolute: true,              // 返回绝对路径  
  dot: true,                   // 包含隐藏文件  
  stats: true                  // 获取文件元信息(大小、时间等)  
}); 

四、实战场景

1. Vite 插件开发:自动收集 SVG 图标

vite.config.js 中结合 vite-plugin-svg-icons 实现图标自动化:

javascript 复制代码
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. 构建工具:批量处理多目录文件

javascript 复制代码
// 匹配 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碾压级的性能,成为前端工程化中文件匹配的首选工具。无论是构建工具开发、静态资源管理,还是自动化脚本,它都能显著提升效率。

延伸阅读

相关推荐
wanhengidc9 分钟前
企业为什么选择浙江电信服务器租用?
运维·服务器
請叫我菜鳥15 分钟前
Nginx反向代理的负载均衡配置
运维·nginx·负载均衡
yangshuo128124 分钟前
家用服务器 Ubuntu 服务器配置与 Cloudflare Tunnel 部署指南
运维·服务器·ubuntu
BillKu32 分钟前
Vue3取消网络请求的方法(AbortController)
前端·javascript·vue.js
海天胜景1 小时前
c# list<T> 合并
前端·c#
风筝超冷1 小时前
基于 Dify + vLLM插件 + Qwen3 构建问答机器人Docker版
运维·docker·容器
whoarethenext2 小时前
linux的时间轮
linux·运维·linq·时间轮
独行soc2 小时前
2025年渗透测试面试题总结-拷打题库35(题目+回答)
linux·运维·服务器·python·网络安全·面试·职场和发展
陈奕昆2 小时前
【LLaMA-Factory实战】Web UI快速上手:可视化大模型微调全流程
前端·ui·llama·大模型微调实战
Jedi Hongbin3 小时前
echarts自定义图表--柱状图-横向
前端·javascript·echarts