minimatch 详解:功能、语法与应用场景
一、minimatch 是什么?
minimatch 是一种用于字符串模式匹配的工具库,核心功能是通过简化的正则表达式语法来匹配文件路径或字符串。它广泛应用于前端构建工具(如 Webpack、Gulp)、包管理器(如 npm)以及文件系统操作中,用于高效筛选文件。
- 工作原理是将 glob 表达式转换为 JavaScriptRegExp 对象。
二、核心语法:通配符与匹配规则
- 基础通配符
*:匹配任意数量(包括零个)的任意字符(不包括路径分隔符 /)例:*.js 匹配 index.js、utils.js,但不匹配 src/app.js
?:匹配单个任意字符例:file?.txt 匹配 file1.txt、fileA.txt,不匹配 file.txt
[]:匹配括号内的任意单个字符例:[abc].js 匹配 a.js、b.js,[0-9].txt 匹配数字结尾的文件
!:在括号内表示取反匹配例:[!abc].js 匹配非 a、b、c 开头的 .js 文件
- 路径匹配
/:明确路径分隔符,支持递归匹配例:src/**/*.js 匹配 src 目录下所有层级的 .js 文件
**:匹配任意层级的目录(包括空目录)例:**/config.json 匹配根目录或任意子目录下的 config.json
- 特殊符号
{}:匹配多个模式中的任意一个(类似正则表达式的 |)
例:{js,css} 匹配 js 或 css,img/{png,jpg} 匹配 img/png 或 img/jpg
!:前缀表示排除匹配(需搭配数组使用)
例:['src/*.js', '!src/test.js'] 匹配 src 下除 test.js 外的所有 .js 文件
+(pattern):扩展 glob 语法,表示匹配一个或多个指定模式
三、典型应用场景
- 文件路径匹配
- React项目.eslintrc.js 文件配置示例
module.exports = {plugins: ['import'],rules: {'import/order': ['error',{// 定义特定模式的分组和位置pathGroups: [{// 匹配 react 相关的 import, 提取到external分组最前pattern: 'react',group: 'external',position: 'before',},{// 把@features下的文件归为internal,注意这里必须是两个**,才可以表示多级目录pattern: '@features/**',group: 'internal',},{// 匹配样式文件的 importpattern: '*.{css,scss,less}',group: 'unknown',patternOptions: { matchBase: true },position: 'after',},],],},
};
四、与正则表达式的区别
- minimatch(通配符):路径匹配 原生支持 / 分隔符和层级
- 正则表达式: 路径匹配 需手动处理路径分隔符