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

延伸阅读

相关推荐
SuperEugene2 分钟前
Vue3 + Element Plus 表格实战:批量操作、行内编辑、跨页选中逻辑统一|表单与表格规范篇
开发语言·前端·javascript
gjc5928 分钟前
踩坑实录:MySQL服务器CPU爆高,元凶竟是SELinux的setroubleshootd?
运维·服务器·数据库·mysql·adb
1104.北光c°10 分钟前
深入浅出 Elasticsearch:从搜索框到精准排序的架构实战
java·开发语言·elasticsearch·缓存·架构·全文检索·es
我才是一卓11 分钟前
linux 安装简易 git 服务端并使用
linux·运维·git
德彪稳坐倒骑驴15 分钟前
MySQL Server 5.5 win端安装,安装SQLyog
运维·服务器
极梦网络无忧26 分钟前
基于 Vite + Vue3 的组件自动注册功能
前端·javascript·vue.js
Predestination王瀞潞39 分钟前
5.4.3 通信->WWW万维网内容访问标准(W3C):WWW(World Wide Web) 协议架构(分层)
前端·网络·网络协议·架构·www
爱学习的程序媛1 小时前
【Web前端】优化Core Web Vitals提升用户体验
前端·ui·web·ux·用户体验
zabr1 小时前
花了 100+ 篇笔记,我整理出 了一套 AI Agent 工程完全指南
前端·后端·agent
乔宕一1 小时前
windows SSH服务修改SSH登陆后的默认终端
运维·windows·ssh