共计 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()
办法中应用数组。
- 应用数组的形式来匹配多种文件,例如上面代码匹配
js
、css
、html
三种文件:
gulp.src(['js/*.js', 'css/*.css', '*.html'])
- 应用数组的形式还有一个益处就是能够很不便的应用排除模式,在数组中的单个匹配模式前加上
!
符号即是排除模式,,它会在匹配的后果中排除这个匹配,要留神一点的是不能在数组中的第一个元素中应用排除模式
gulp.src([*.js,'!b*.js']) // 匹配所有 js 文件,但排除掉以 b 结尾的 js 文件
gulp.src(['!b*.js',*.js]) // 不排除任何文件,因为排除模式不能呈现在数组的第一个元素中
此外,还能够应用开展模式。开展模式以花括号 {}
作为定界符,依据它外面的内容,会开展为多个模式,最初匹配的后果为所有开展的模式相加起来失去的后果。
开展的例子如下:
a{b,c}d
:会开展为abd
,acd
。a{b,}c
:会开展为abc
,ac
。a{0..3}d
:会开展为a0d
,a1d
,a2d
,a3d
。a{b,c{d,e}f}g
:会开展为abg
,acdfg
,acefg
。a{b,c}d{e,f}g
:会开展为abdeg
,acdeg
,abdeg
,abdfg
。
字符串片段与分隔符
字符串片段是指两个分隔符之间的所有字符组成的字符串,在 globs
中,分隔符永远是 /
字符,不辨别操作系统,即便是在采纳 \\
作为分隔符的 Windows
操作系统中也是如此。在 globs
中,\\
字符被保留作为转义字符应用。
示例:
如果 *
符号被本义,那么 *
将被作为一个一般字符应用,而不再是通配符:
'glob_with_uncommon_\\*_character.js'
防止应用 Node
的 path
类办法来创立 globs
,例如 path.join
。
在 Windows
中,因为 Node
应用 \\
字符作为门路分隔符,因而将会产生一个有效的 globs
。还要防止应用 __dirname
和 __filename
全局变量,因为同样的起因,process.cwd()
办法也要防止应用。
const invalidGlob = path.join(__dirname, 'src/*.js');