Gulp globs匹配规则

Posted 知否

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gulp globs匹配规则相关的知识,希望对你有一定的参考价值。

本节我们来学习 Gulp 中的 globs 的匹配规则。glob 是由普通字符或通配字符组成的字符串,用于匹配文件路径。我们可以使用一个或多个 glob 匹配规则在文件系统中定位文件。

gulp.src()方法

src() 方法需要一个 glob 字符串或一个 glob 字符串组成的数组来作为参数,确定哪些文件需要被操作。

gulp.src(globs[, options])
  • globs:文件匹配模式,类似于正则表达式,用来匹配文件路径。
  • options:可选参数,通常情况不需要用到。
示例:
gulp.src(\'./js/*.js\')                        // * 匹配js文件夹下所有.js格式的文件
gulp.src(\'./js/**/*.js\')                     // ** 匹配js文件夹的0个或多个子文件夹
gulp.src([\'./js/*.js\',\'!./js/index.js\'])     // ! 匹配除了index.js之外的所有js文件
gulp.src(\'./js/**/{omui,common}.js\')         // {} 匹配{}里的文件名

匹配模式

gulp 内部使用了 node-glob 模块来实现其文件匹配功能。我们可以使用下面这些特殊的字符来匹配我们想要的文件。

单匹配模式:

匹配符描述
*匹配文件路径中的 0 个或多个字符,但不会匹配路径分隔符,除非路径分隔符出现在末尾
**匹配路径中的 0 个或多个目录及其子目录
匹配方括号中出现的字符中的任意一个
[...]匹配方括号中出现的字符中的任意一个

多匹配模式,同时使用多种匹配:

表达式描述
!(pattern\\pattern\\pattern)匹配任何与括号中给定的任一模式都不匹配的
?(pattern\\pattern\\pattern)匹配括号中给定的任一模式0次或1次
+(pattern\\pattern\\pattern)匹配括号中给定的任一模式至少1次
*(pattern\\pattern\\pattern)匹配括号中给定的任一模式0次或多次
@(pattern\\pattern\\pattern)匹配括号中给定的任一模式1次

数组

如果有多种匹配模式时,我们可以在 src() 方法中使用数组。

  • 使用数组的方式来匹配多种文件,例如下面代码匹配 jscsshtml 三种文件:
gulp.src([\'js/*.js\', \'css/*.css\', \'*.html\'])
  • 使用数组的方式还有一个好处就是可以很方便的使用排除模式,在数组中的单个匹配模式前加上 ! 符号即是排除模式,,它会在匹配的结果中排除这个匹配,要注意一点的是不能在数组中的第一个元素中使用排除模式
gulp.src([*.js,\'!b*.js\']) // 匹配所有js文件,但排除掉以b开头的js文件
gulp.src([\'!b*.js\',*.js]) // 不排除任何文件,因为排除模式不能出现在数组的第一个元素中

此外,还可以使用展开模式。展开模式以花括号 {} 作为定界符,根据它里面的内容,会展开为多个模式,最后匹配的结果为所有展开的模式相加起来得到的结果。

展开的例子如下:

  • a{b,c}d: 会展开为 abdacd
  • a{b,}c:会展开为 abcac
  • a{0..3}d:会展开为 a0da1da2da3d
  • a{b,c{d,e}f}g:会展开为 abgacdfgacefg
  • a{b,c}d{e,f}g:会展开为 abdegacdegabdegabdfg

字符串片段与分隔符

字符串片段是指两个分隔符之间的所有字符组成的字符串,在 globs 中,分隔符永远是 / 字符,不区分操作系统,即使是在采用 \\\\ 作为分隔符的 Windows 操作系统中也是如此。在 globs 中,\\\\ 字符被保留作为转义字符使用。

示例:

如果 * 符号被转义,那么 * 将被作为一个普通字符使用,而不再是通配符:

\'glob_with_uncommon_\\\\*_character.js\'

避免使用 Nodepath 类方法来创建 globs,例如 path.join

Windows 中,由于 Node 使用 \\\\ 字符作为路径分隔符,因此将会产生一个无效的 globs。还要避免使用 __dirname__filename 全局变量,由于同样的原因,process.cwd() 方法也要避免使用。

const invalidGlob = path.join(__dirname, \'src/*.js\');

以上是关于Gulp globs匹配规则的主要内容,如果未能解决你的问题,请参考以下文章

精通gulp的关键:文件路径匹配模式glob

#每天五分钟之IT技能包# 前端自动化构建利器 gulp 方法篇

glob匹配,排除所有JS文件

Glob观看多个文件,处理一个

glob模式

gulp API 文档