参考资料:https://github.com/isaacs/nod…
下文是关于 Gulp 的 gulp.src(globs[, options])
要领的第一个参数 globs
的进修。
须要注重的是:
当该参数 globs
为数组时,其包含的多个 glob 会按递次举行剖析,这意味着以下企图是能够完成的:
// 消除一切以字母 b 开首的 js 文件,但不消除 bad.js
gulp.src(['*.js', '!b*.js', 'bad.js'])
Glob
运用 shell 里的 patterns 婚配文件,如 *
等。
用法
用 npm 装置 glob
npm i glob
编写js代码:
var glob = require("glob");
// options 是可选参数
glob("**/*.js", options, function (er, files) {
// files 参数是一个文件名数组。
// 若参数 options 的 `nonull` 属性为 true,则在婚配不到文件时, files 参数则为 ["**/*.js"]。
//( 若 `nonull` 为 false 时, files 为空数组)。
// er 是一个 error 对象或 null。
})
Glob 低级
“Globs” 是你经由过程在命令行输入字符后完成某些操纵时的 pattern。如 ls *.js
,或将 build/*
放在 .gitignore
。
在剖析途径段的 patterns 前,braced sections 会睁开为一个鸠合。braced sections 以 {
开首,}
为末端,中心部份以英文逗号 ,
分开。braced sections 能够含有斜杠标记 /
。因而,a{/b/c,bcd}
会睁开为 a/b/c
和 abcd
。
以下字符用在途径段时,会具有迥殊的寄义:
*
: 婚配0或多个字符。glob("js/*.js", function(err, files){ console.log(files); });
猎取js目次下的一切js文件(不包含以.
开首的文件,下文有要领处理:对 glob 要领的 options 参数的属性 dot:true
)。
?
: 婚配一个字符(不能为空)。glob("js/a?.js", function(err, files){ console.log(files); }
猎取js目次下一切文件名长度为2字符的js文件。比方:能婚配 js/ab.js,不能婚配 js/a.js。
[...]
: 婚配该途径段中在指定局限内的一个字符。
注重:不能组合,只能婚配个中一个字符。别的,假如指定局限的首字符是 !
或 ^
,则婚配不在指定局限内的一个字符。
glob("js/a[0-3].js", function(err, files){
console.log(files);
})
猎取js目次下以a
开首,第二个字符为0-3之间(包含0和3)的js文件。若改成 ["js/[^ab].js"]
,则婚配 js/c.js,不婚配 js/cd.js、js/ac.js。
!(pattern|pattern|pattern)
: 婚配(完整且准确地婚配,且不可组合)不相符任何模子之一的字符。注重|
前后不能有空格,下同。glob("js/!(a|b).js", function(err, files){ console.log(files); });
婚配 js 目次下的 aa.js、ab.js、ba.js、c.js 不婚配 a.js、b.js。
?(pattern|pattern|pattern)
:婚配多个 pattern 中 0 或 1 个(准确婚配,不能够组合)。glob("js/?(a|b).js", function(err, files){ console.log(files); });
婚配 js 目次下的 a.js、b.js,不婚配 ab.js
+(pattern|pattern|pattern)
: 最少婚配多个 pattern 中的一个。与*(pattern|pattern|pattern)
不必的是,它必需1个及以上,不能为空。glob("js/+(a|b)b.js", function(err, files){ console.log(files); });
婚配 js 目次下的 ab.js、bb.js、ababab.js,不能婚配 abcd.js(也就是说:只允许婚配出现在局限内的字符) ,也不能像 js/*(a|b)b.js
那样婚配 b.js。
*(a|b|c)
: 婚配括号中多个 pattern 中0或恣意多个(pattern可互相组合)。glob("js/*(a|b|c).js", function(err, files){ console.log(files); });
婚配 js 目次下的 a.js、ab.js、abc.js、ba.js,不婚配 abcd.js(也就是说:只允许婚配出现在局限内的字符)。
@(pattern|pattern|pattern)
婚配多个 pattern 中的恣意一个(即不能够组合,且不能为空或大于1个)。与?(pattern|pattern|pattern)
区别是不可为空。glob("js/@(a|b)b.js", function(err, files){ console.log(files); });
婚配 js 目次下的 ab.js、bb.js,不婚配 b.js、abb.js、abc.js。
**
与*
相似,能够婚配任何内容(可婚配空),但**
不仅能婚配途径中的特定一段,还能婚配子女一切目次(即多段途径段)。glob("js/**/*.js", function(err, files){ console.log(files); });
婚配 js 目次下一切js文件,如 js/a.js 或 js/a/b/c/d.js。
Dots(即 .
)
假如文件或目次的某途径段以 .
作为首字符,那末该途径段不会相符任何 glob pattern,除非该 pattern 的响应途径段一样以 .
作为首字符。
比方,pattern a/.*/c
会婚配文件 a/.b/c
,而 pattern a/*/c
则不会婚配该文件,由于 *
不会婚配以 .
字符开首的文件。
可经由过程在 options 设置 dot: true
,让 glob 将 .
视为一般字符。
Basename 婚配
假如在 options 设置 matchBase: true
,且 pattern 不含有 /
,那末将会寻觅任何婚配 basename 的文件,即在当前途径下的文件树举行搜刮。比方,*.js
会婚配 test/simple.basic.js
。
空集
假如不婚配任何文件,则会返回空数组。这点与 shell 差别,shell 会返回本身 pattern。
$echo echo a*s*d*f
a*s*d*f
若想获得 bash 那样的行动,可对 options 参数设置 nonull:true
。
若发明文中有任何毛病,或有任何好的发起,迎接批评。
GitHub:关于 Glob (gulp) 的进修