记一下gulp.src()用法
# 语法
gulp.src(globs[, options])
- globs:文件匹配模式(类似正则表达式),用来匹配文件路径(包括文件名)
- options:可选参数。通常情况不需要用到
gulp.src('**/*.js')
# 匹配模式
内部使用node-glob模块实现文件匹配
# 单匹配
| 匹配符 | code | 匹配 | 不匹配 | 备注 |
* | * | a.b, x.y, abc, abc/ | a/b.js | 不匹配/,除非/出现在末尾 |
*.* | a.b, x.y | abc | 匹配所有带后缀的文件 | |
*/*/*.js | a/b/c.js, x/y/z.js | a/b.js, a/b/c/d.js | 匹配固定层级目录 | |
** | ** | abc, a/b, a/b.js, a/b/c, a/b/c.js | 匹配所有的目录和文件 | |
**/*.js | a.js, a/b.js, a/b/c.js | 匹配所有目录下的 .js 文件 | ||
a/**/z | a/z, a/b/z, a/b/c/z, a/b/c/d/z | |||
a/**b/z | a/b/z, a/nb/z | a/c/nb/z, | ** 单独出现才能匹配多级目录 | |
? | ?.js | a.js, b.js, c.js | 占位符匹配,不匹配 / | |
a?? | a.b, abc | ab/ | 占位符与字符搭配使用 | |
[] | [abc].js | a.js, b.js, c.js | ab.js, xyz.js | 整个 [] 只匹配一个字符 |
[^abc].js[!abc].js | x.js, y.js | a.js, b.js, c.js | 排除匹配字符 |
# 多匹配模式(同时使用多种匹配)
- 类正则
| 表达式 | 备注 |
|---|---|
!(pattern|pattern|pattern) | 匹配任何与括号中给定的任一模式都不匹配的 |
?(pattern|pattern|pattern) | 匹配括号中给定的任一模式0次或1次,类似于js正则中的(pattern|pattern|pattern)? |
+(pattern|pattern|pattern) | 匹配括号中给定的任一模式至少1次,类似于js正则中的(pattern|pattern|pattern)+ |
*(pattern|pattern|pattern) | 匹配括号中给定的任一模式0次或多次,类似于js正则中的(pattern|pattern|pattern)* |
@(pattern|pattern|pattern) | 匹配括号中给定的任一模式1次,类似于js正则中的(pattern|pattern|pattern) |
- 数组
- 使用数组匹配多种模式
gulp.src(['js/*.js', 'css/*.css', '*.html'])- 数组 + 排除,排除模式不能出现在数组的第一个元素中
gulp.src([*.js,'!b*.js']) // 匹配所有js文件,但排除掉以b开头的js文件 gulp.src(['!b*.js',*.js]) // 不排除任何文件,因为排除模式不能出现在数组的第一个元素中 - 展开
- {} 作为定界符,根据它里面的内容,会展开为多个模式,
最后匹配的结果为所有展开的模式相加起来得到的结果- a{b, c}d 展开为:abc,acd
- a{b,}c 展开为:abc,ac
- a{0..3}c 展开为:a0c,a1c,a2c
- a{b, c{d, e}f}g 展开为:abg,acdfg,acefg
- a{b, c}d{e, f}g 展开为:abdeg,acdeg,abdeg,abdfg
- {} 作为定界符,根据它里面的内容,会展开为多个模式,

