前端工程化利器: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. 安裝

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-glob1.2s功能全,速度較慢
tiny-glob0.8s輕量但功能受限
fast-glob0.3s高性能 + 完整功能

六、最佳實踐

1. 模式語法規范

  • *匹配任意字符,?匹配單個字符,**匹配多級目錄。
  • 示例:src/**/*.{js,ts} 匹配所有 JS 和 TS 文件。

1. 避免過度匹配

  • 使用 ignore 選項排除 node_modules 等目錄。
  • 結合 .gitignore 規則(通過 gitignore: true 配置)

七、總結

fast-glob 以其 極簡的 API碾壓級的性能,成為前端工程化中文件匹配的首選工具。無論是構建工具開發、靜態資源管理,還是自動化腳本,它都能顯著提升效率。

延伸閱讀

  • Glob 模式語法詳解
  • Vite 生態中的文件匹配實戰
  • fast-group - npm

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/904115.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/904115.shtml
英文地址,請注明出處:http://en.pswp.cn/news/904115.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

React class 的組件庫與函數組件適配集成

如果你有一個 基于 React class 的組件庫,現在需要在 React hooks 函數組件中使用,你可以通過以下幾種方式實現適配和集成: 數據生命周期確保 class 組件使用 React.forwardRef 導出(或手動綁定 ref) ? 1. 直接使用 c…

Sway初體驗

Sway(縮寫自 SirCmpwn’s Wayland compositor[1])是一款專為 Wayland 設計的合成器,旨在與 i3 完全兼容。根據官網所述: Sway 是 Wayland 的合成器,也是 x11 的 i3 窗口管理器的替代品。它可以根據您現有的 i3 配置工作…

dubbo 參數校驗-ValidationFilter

org.apache.dubbo.rpc.Filter 核心功能 攔截RPC調用流程 Filter是Dubbo框架中實現攔截邏輯的核心接口,作用于服務消費者和提供者的作業鏈路,支持在方法調用前后插入自定義邏輯。如參數校驗、異常處理、日志記錄等。擴展性機制 Dubbo通過SPI擴展機制動態…

Lesson 16 A polite request

Lesson 16 A polite request 詞匯 park n. 公園,停車場,莊園 v. 停車,泊車 例句:讓我來停車。    Let me park. 相關:spot n. 車位 區別:garden n. 花園 [小,私家的] 例句:我們…

解決 Builroot 系統編譯 perl 編譯報錯問題

本文提供一種修復 Builroot 系統編譯 perl 編譯報錯途徑 2025-05-04T22:45:08 rm -f pod/perl5261delta.pod 2025-05-04T22:45:08 /usr/bin/ln -s perldelta.pod pod/perl5261delta.pod 2025-05-04T22:45:08 /usr/bin/gcc -c -DPERL_CORE -fwrapv -fpcc-struct-return -pipe -f…

Spring MVC 中解決中文亂碼問題

在 Spring MVC 中解決中文亂碼問題,需要從 請求參數編碼 和 響應內容編碼 兩方面入手。以下是完整的解決方案: 一、解決請求參數中文亂碼 1. POST 請求編碼(表單提交) 配置 CharacterEncodingFilter 在 web.xml 中添加 Spring 提…

MYSQL數據庫突然消失

之前在下載mysql時發現沒有my.ini。考慮到后面的項目可能需要,看著教程自己創建了一次,當時就發生了所有數據庫消失的問題,近幾天這種事件又發生了。我在服務里看到我有mysql和mysql57兩個服務,啟動一個的時候另一個就無法啟動&am…

【Spring】idea + maven 從零創建Spring IoC容器示例

【Spring】idea maven 從零創建Spring IoC容器示例 1. 環境準備2. 創建maven項目3. 添加依賴4. 創建Java類與接口4.1 定義接口UserService4.2 實現接口UserServiceImpl 5. 配置Spring IoC容器6. 編寫主類調用IoC容器擴展:使用注解方式實現IoC1. 修改beans.xml2.使用…

面試回答之STAR結構

面試回答之STAR結構 1. STAR結構的起源 STAR是行為面試法(Behavioral Interview)的核心框架,由以下四個單詞首字母組成: ? Situation(情境) ? Task(任務) ? Action&#xff…

Kubernetes部署運行應用

①使用 Deployment 運行一個無狀態應用 ②運行一個單實例有狀態應用 ③運行一個有狀態的應用程序 ④使用 Persistent Volumes 部署 WordPress 和 MySQL

二叉搜索樹的最近祖先(遞歸遍歷)

235. 二叉搜索樹的最近公共祖先 - 力扣(LeetCode) class Solution { private:TreeNode*traversal(TreeNode*cur,TreeNode*p,TreeNode*q){if(curNULL){return NULL;}if(cur->val>p->val&&cur->val>q->val){TreeNode*lefttrave…

網絡:TCP三次握手、四次揮手

目錄 深刻理解三次握手 深刻理解四次揮手 深刻理解三次握手 三次握手時,如果最后一個ACK包,服務器沒有收到,此時: 客戶端:認為已經建立鏈接 服務器:認為沒有建立鏈接,還在超時等待。 而此…

MySQL 實戰 45 講 筆記 ----來源《極客時間》

01 | 基礎架構:一條SQL查詢語句是如何執行的? 1. MySQL 可以分為 Server層 和 存儲引擎層 兩部分。Server 層包括連接器、查詢緩存、分析器、優化器、執行器等。存儲引擎層支持 InnoDB、MyISAM等. (1) 連接器:管理連接,權限認證…

nextjs+supabase vercel部署失敗

1.不能含有<any> 改成unknown或者增加類(如圖) 2.檢查vecel是否配置環境變量&#xff08;即supabase的url和anon-key&#xff09;

數據庫Mysql_聯合查詢

或許自己的不完美才是最完美的地方&#xff0c;那些讓自己感到不安的瑕疵&#xff0c;最終都會變成自己的特色。 ----------陳長生. 1.介紹 1.1.為什么要進行聯合查詢 在數據設計的時候&#xff0c;由于范式的需求&#xff0c;會被分為多個表&#xff0c;但是當我們要查詢數據…

(37)VTK C++開發示例 ---紋理地球

文章目錄 1. 概述2. CMake鏈接VTK3. main.cpp文件4. 演示效果 更多精彩內容&#x1f449;內容導航 &#x1f448;&#x1f449;VTK開發 &#x1f448; 1. 概述 將圖片紋理貼到球體上&#xff0c;實現3D地球的效果。 該代碼使用了 VTK (Visualization Toolkit) 庫來創建一個紋理…

VMware-centOS7安裝redis分布式集群

1.部署redis包 1.1 在usr/local文件夾里創建文件夾 mkdir software 1.2 進入文件夾 cd /usr/local/software/ 下載redis wget http://download.redis.io/releases/redis-6.2.6.tar.gz解壓 tar zxvf redis-6.2.6.tar.gz重命名文件夾 mv redis-6.2.6 redis安裝gcc編譯器 yum i…

【RocketMQ Broker 相關源碼】- broker 啟動源碼(2)

文章目錄 1. 前言2. 創建 DefaultMessageStore3. DefaultMessageStore#load3.1 CommitLog#load3.2 loadConsumeQueue 加載 ConsumeQueue 文件3.3 創建 StoreCheckpoint3.4 indexService.load 加載 IndexFile 文件3.5 recover 文件恢復3.6 延時消息服務加載 4. registerProcesso…

認識含鹽褶皺和沖斷帶中的前造山運動蒸發巖變形

主要觀察結果的示意圖模型&#xff0c;并提出了三疊紀前造山蒸發巖變形的演化模型。&#xff08;a&#xff09; 蒸發巖的初始平緩隆起&#xff0c;在鹽枕和鹽背斜頂部有滑塌褶皺和同沉積伸展斷層。&#xff08;b&#xff09; 底辟形成&#xff0c;主動刺穿和拖動折疊長底辟&…

數據庫MySQL學習——day8(復習與鞏固基礎知識)

文章目錄 1. 數據庫基礎概念復習2. 常用SQL命令復習2.1 SELECT 查詢數據2.2 INSERT 插入數據2.3 UPDATE 更新數據2.4 DELETE 刪除數據 3. 表操作復習3.1 創建表3.2 修改表3.3 刪除表 4. 實踐任務4.1 創建樣例數據庫和表4.2 插入和更新數據4.3 使用WHERE、ORDER BY、LIMIT進行查…