关于 Glob (gulp)的进修

参考资料: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/cabcd

以下字符用在途径段时,会具有迥殊的寄义:

  • * : 婚配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) 的进修

    原文作者:思考中
    原文地址: https://segmentfault.com/a/1190000004481856
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞