本节咱们来学习 Gulp
中的 globs
的匹配规则。glob
是由普通字符或通配字符组成的字符串,用于匹配文件路径。咱们能够使用一个或多个 glob
匹配规则在文件系统中定位文件。css
src()
方法须要一个 glob
字符串或一个 glob
字符串组成的数组来做为参数,肯定哪些文件须要被操做。html
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
模块来实现其文件匹配功能。咱们能够使用下面这些特殊的字符来匹配咱们想要的文件。node
单匹配模式:正则表达式
匹配符 | 描述 |
---|---|
* | 匹配文件路径中的 0 个或多个字符,但不会匹配路径分隔符,除非路径分隔符出如今末尾 |
** | 匹配路径中的 0 个或多个目录及其子目录 |
? | 匹配方括号中出现的字符中的任意一个 |
[...] | 匹配方括号中出现的字符中的任意一个 |
多匹配模式,同时使用多种匹配:gulp
表达式 | 描述 | ||
---|---|---|---|
!(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]) // 不排除任何文件,由于排除模式不能出如今数组的第一个元素中
此外,还能够使用展开模式。展开模式以花括号 {}
做为定界符,根据它里面的内容,会展开为多个模式,最后匹配的结果为全部展开的模式相加起来获得的结果。学习
展开的例子以下:ui
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
中,\\
字符被保留做为转义字符使用。操作系统
若是 *
符号被转义,那么 *
将被做为一个普通字符使用,而再也不是通配符:3d
'glob_with_uncommon_\\*_character.js'
避免使用 Node
的 path
类方法来建立 globs
,例如 path.join
。
在 Windows
中,因为 Node
使用 \\
字符做为路径分隔符,所以将会产生一个无效的 globs
。还要避免使用 __dirname
和 __filename
全局变量,因为一样的缘由,process.cwd()
方法也要避免使用。
const invalidGlob = path.join(__dirname, 'src/*.js');