关于gulp:Gulp-globs匹配规则

6次阅读

共计 1753 个字符,预计需要花费 5 分钟才能阅读完成。

本节咱们来学习 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');
正文完
 0