Glob Patterns匹配模式使用

前段时间在用workbox时,在做precache时,匹配模式基于的是Glob Pattern模式,于是就看了下相关文档。

下面翻译一下node-glob的使用,原文:https://github.com/isaacs/node-glob#glob-primer


Glob

像在shell里面,用*等匹配模式来匹配文件。

Glob基于Javascript实现,使用minimatch库进行匹配。

使用

使用npm安装

npm i glob
var glob = require("glob")// options可选
glob("**/*.js", options, function (er, files) {// files是匹配到的文件数组// 如果`options`中的`nonull`为true, 当未发现时, files返回["**/*.js"]// `er`是一个错误对象或者null
})

Glob 入门

"Glob"是一种模式,类似于在命令行中输入ls *.js,或是在.gitignore文件中写build/*

在解析路径模式时,大括号内使用逗号进行分隔,分隔部分可以包含/,所以a{/b/c,bcd}会被展开为a/b/cabcd

在匹配路径使用时,以下字符有一些特殊的作用:

  • *:匹配单路径下的 0 个或 多个 字符串。
  • ?:匹配一个字符串。
  • [...]:匹配指定范围内的字符串,类似于正则表达式中的[]。如果[]中的第一个字符串是!或者^,则匹配不在范围内的任意字符串。
  • !(pattern|pattern|pattern):匹配与提供模式中不匹配的内容。
  • ?(pattern|pattern|pattern):匹配提供模式中的 0次 或 1次。
  • +(pattern|pattern|pattern):匹配提供模式中的 1次 或 多次。
  • *(a|b|c):匹配提供模式中的 0次 或 多次。
  • @(pattern|pat*|pat?erN):匹配与提供模式中完全匹配的。
  • **:和*一样,可以匹配路径中的 0个 或 多个,而且**可以匹配当前目录和子目录。但无法抓去符号链接的目录。

.

如果匹配的文件或目录部分以.开头,除非匹配的路径也以.开头,否则不会匹配任何模式。

例如 a/.*/c模式会匹配a/.b/c。然而a/*/c模式却不会进行匹配,因为*并不是以.开始的。

你可以通过设置option dot:true,让Glob把.做为正常字符串。

Basename的匹配

如果你在 option中设置matchBase:true,当模式中没有/,它会在任意目录下去匹配。例如*.js会匹配到test/simple/basic.js

空集

如果没有匹配到任何文件,它会返回空数组[]。它与shell不一样,shell会在未匹配的情况下返回本身。例如:

$ echo a*s*d*f
a*s*d*f

可以通过设置optionnonull:true,来获得和bash shell一样的效果。

glob.hasMagic(pattern, [options])

如果pattern中有任何特殊字符串,则返回为true,否则返回为false

注意:options会影响结果。
如果options中设置noext:true,那么+(a|b)将不会视为魔术模式。
如果模式中支持{}表达式,那么也属于Magic,例如a/{b/c,x/y}。除非option设置nobrace:true

glob(pattern, [options], cb)

  • pattern {String}: 匹配模式。
  • options {Object}
  • cb {Function}
    • err {Error | null}
    • matches {Array<String>}: 匹配模式后的文件名数组。

执行异步全局搜索。

glob.sync(pattern, [options])

  • pattern {String}:匹配模式。
  • options {Object}
  • return: {Array<String>}:匹配模式下的文件名。

执行异步全局搜索。

Class: glob.Glob

通过实例化glob.Glob来创建Glob对象。

var Glob = require("glob").Glob
var mg = new Glob(pattern, options, cb)

它是一个EventEmitter。它会立即执行遍历目录进行匹配。

new glob.Glob(pattern, [options], [cb])

  • pattern {String}: 匹配模式。
  • options {Object}
  • cb {Function}:成功或失败的回掉。
    • err {Error | null}
    • matches {Array<String>}: 匹配后的文件名数组。

注意 如果option设置sync标志, 那么匹配结果可以通过g.found获取。

属性

  • minimatch :glob使用的minimatch对象。
  • options :传入的option对象。
  • aborted :布尔值,在调用abort()时会设置为true。 在abort()后无法再进行全局搜索,但是可以通过重新设置statCache去避免重复系统调用。
  • cache :Object,可能有以下值:
    • false - 路径不存在。
    • true - 路径存在。
    • 'FILE' - 路径存在,但不是目录。
    • 'DIR' - 路径存在,是目录。
    • [file, entries, ...] - 路径存在,结果是数组,类似于fs.readdir的结果。
  • statCachefs.stat结果缓存,避免多次计算相同路径。
  • symlinks :记录哪些路径是符号链接,与**模式相关。
  • realpathCache :传递给fs.realpath的可选参数,避免不必要的系统调用。存储在Glob的实例对象上,可重复使用。

事件

  • end:匹配完成后,收到匹配的结果。当nonull设置时,在没有匹配结果的情况下会在返回的数组中包含原匹配模式字符串,默认情况下匹配结果是被排序的, 除非设置nosort
  • match: 每次发现匹配结果就会触发,结果中包含匹配的信息。它不会删除重复数据和解析的真实路径。
  • error:在发生意外错误时触发。 如果设置options.strict,那么任何fs的错误都会触发。
  • abortabort()调用时触发。

方法

  • pause:暂时停止搜索。
  • resume:恢复搜索。
  • abort:终止搜索。

选项

所有Minimatch的选项都可以传递给Glob去改变匹配模式,此外还添加了一些特有的glob-specific

除非另有说明,否则所有选项默认都为false

所有选项也会被添加到Glob对象上。

如果正在运行多个glob操作,可以通过Glob对象的传递options给后面的操作使用,方便某些statreaddir调用。可以通过共享symlinks statCache realpathCache cache option加快并行glob操作。

  • cwd:要搜索的当前目录。默认process.cwd()
  • root:以/开始的挂载位置。默认是path.resolve(options.cwd, "/")(Unix系统是/,其他的一些Windows系统是C:\)。
  • dot:在正常模式和**模式下包含.。注意,在模式字符串中定义的点将始终与.文件匹配。
  • nomount:默认匹配模式中以/开始的会转到根目录的挂载点,以便返回有效的文件路径。设置debug标志关闭此行为。
  • mark:在目录匹配中添加/。注意,这需要额外的stat调用。
  • nosort:结果不排序。
  • stat:设置true统计stat所有结果。它可能会降低性能,并且完全没必要, 除非readdir认为文件存在的不可靠标志。
  • silent:读取目录遇到异常错误,并向stderr打印报警信息。设置optionsilent,关闭警告信息。
  • strict:尝试读取目录遇到异常错误时,进行会继续搜索其他匹配项。设置strict后,当出现这些情况时会引发错误。
  • cache 可以看上同的cache属性。传入之前生成的缓存对象保存一些fs调用。
  • statCache:文件系统信息结果的缓存,防止不必要的stat调用。 通常不需要设置它,如果你知道文件系统不会在调用中改变,你可以将statCache从一个glob()中调用传递给另一个的options对象中。
  • symlinks 已知符号链接的缓存。在解析**匹配时,你可以传入上一次生成的符号链接对象用来保存stat调用。
  • sync 弃用:使用glob.sync(pattern, opts)替代。
  • nounique:在一些情况中,{}模式会导致同一个文件在结果中出现多次。默认情况下,它会防止结果中出现重复值。设置这个属性会关闭这个行为。
  • nonull:设置不返回空数组,而是返回一个包含模式本身的数组。这是glob(3)中的默认值。
  • debug:开启后会在minimatchglob开启日志记录。
  • nobrace:不展开大括号,如{a,b}{1..3}
  • noglobstar:针对多个文件名不匹配**(即 会替换为正常的*)。
  • noext:不去匹配+(a|b)“extglob”模式。
  • nocase:不区分大小写的匹配。注意:在一些不区分大小写的系统中no-magic模式默认会被匹配,statreadir将不会引发错误。
  • matchBase:如果模式中不包含/字符串,则执行仅基于basename匹配。也就是说*.js会被视为**/*.js,会匹配所有目录下的所有js。
  • nodir:只匹配文件,不匹配目录。 (注意:只匹配目录,只需要在模式的最后加上/)
  • ignore:添加模式或glob模式的数组去排除匹配。注意,ignore模式下总是dot:true,其他设置无效。
  • follow**模式下,访问符号链接目录。注意 它可能会导致在出现循环链接时出现大量重复引用。
  • realpath:设置为true会在所有结果中调用fs.realpath。在无法解析的符号链接下,返回匹配结果的完整绝对路径。(虽然它通常是一个失效的符号链接)
  • absolute:设置为真,将会在匹配的结果中接收到绝对路径。与realpath不同,它也会影响match事件中的返回值。

博客名称:王乐平博客

CSDN博客地址:http://blog.csdn.net/lecepin

知识共享许可协议
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401655.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Workbox CLI v3.x 中文版

在写PWA应用时&#xff0c;用到WorkBox工具&#xff0c;使用过程中发现没有中文的帮助文档&#xff0c;为了体验好一些&#xff0c;也为了方便自己和他人查看&#xff0c;在这里翻译了一下workbox-cli。 Workbox CLI 是什么? Workbox命令行&#xff08;在workbox-cli包内&…

Workbox.routing v3.x 中文版

NAMESPACE STATIC VERSION V3.6.1 类 NavigationRoute NavigationRoute可以轻松创建匹配浏览器navigation requests的Route。 它仅匹配mode设置为navigate的请求。 您可以只使用blacklist和whitelist参数中的一个或两个&#xff0c;将此路由应用于导航请求中。 RegExpRout…

Workbox.strategies v3.x 中文版

NAMESPACE STATIC VERSION V3.6.1 该模块提供了大多数serviceworker常用的缓存策略的简单实现。 类 CacheFirst cache-first请求策略的实现。 缓存优先策略对于带版本号的资源是非常有用的&#xff0c;像这种URLstyles/example.a8f5f1.css&#xff0c;因为它们可以长时间缓存…

集算器访问HTTP数据的代码示例

使用集算器&#xff08;esProc&#xff09;可以很方便的从http数据源读取数据进行处理。本例子中有一个servlet&#xff0c;对外提供json格式的雇员信息查询。Servlet访问数据库的员工表&#xff0c;保存了员工的信息&#xff0c;如下&#xff1a;EID NAME SURNAME …

PWA(Progressive Web App)入门系列:Cache Storage Cache

前言 目前浏览器的存储机制有很多&#xff0c;如&#xff1a;indexedDB、localStorage、sessionStorage、File System API、applicationCache 等等&#xff0c;那为什么又制定了一套 Cache API 呢&#xff1f;对比其他存储机制有什么优势&#xff1f; 简介 Cache API 是一套…

「浏览器插件」无广告国内视频平台直接播放插件

前段时间发现一些比较不错的解析国内视频平台的一些 API 接口&#xff0c;很早之前基于这些接口做过一个 Android 端的播放软件&#xff0c;但为了更方便使用吧&#xff0c;于是做了一个 Chrome 的浏览器插件&#xff0c;解析接口也是在线更新的&#xff0c;所以用起来会比较方…

kafka性能测试(转)KAFKA 0.8 PRODUCER PERFORMANCE

来自:http://blog.liveramp.com/2013/04/08/kafka-0-8-producer-performance-2/ At LiveRamp, we constantly face scaling challenges as the volume of data that our infrastructure must deal with continues to grow. One such challenge involves the logging system. At…

Workbox-Window v4.x 中文版

Workbox 目前发了一个大版本&#xff0c;从 v3.x 到了 v4.x&#xff0c;变化有挺大的&#xff0c;下面是在 window 环境下的模块。 什么是 workbox-window? workbox-window 包是一组模块&#xff0c;用于在 window 上下文中运行&#xff0c;也就是说&#xff0c;在你的网页内…

媒体播放器三大底层架构

2019独角兽企业重金招聘Python工程师标准>>> 媒体播放工具&#xff0c;这里主要指视频播放&#xff0c;因为要面临庞大的兼容性和纷繁复杂的算法&#xff0c;从架构上看&#xff0c;能脱颖而出的体系屈指可数。大体来说业界主要有3大架构&#xff1a;MPC、MPlayer和…

PWA 可用性检测工具

针对移动端或者 PC 端浏览器是否对 PWA 可用的问题上&#xff0c;做了一个简单的站点&#xff0c;来实现上述问题的方便检测。让开发者较快的了解终端浏览器的特性支持度。 使用 工具地址&#xff1a;https://lecepin.gitee.io/detect-sw/ 地址二维码&#xff1a; 检测 可…

PWA 应用列表及常用工具

引言 在做 PWA 的过程中自己写了一些相关的应用和工具&#xff0c;在这里整合下&#xff0c;方便记录及查找使用。 应用列表 PWA 支持检测工具番茄钟二维码生成新闻应用身体数据统计应用支付宝集福应用田英章书法字典应用抖音无水印下载应用很好用的备忘录精神氮泵 PWA 支持检…

Struts2中访问HttpServletRequest和HttpSession

2019独角兽企业重金招聘Python工程师标准>>> 关键字: struts2 httpservletrequest httpsession 在没有使用Struts2之前,都习惯使用HttpServletRequest和HttpSession对象来操作相关参数,下面介绍一下在Struts2中访问隐藏的HttpServletRequest和HttpSession的两种方法…

web前端长度单位详解(px、em、rem、%、vw/vh、vmin/vmax、vm、calc())

基础理论1&#xff09;简介2&#xff09;绝对长度3&#xff09;相对长度4&#xff09;经验之谈1&#xff09;简介 在前端开发中&#xff0c;会遇到各种不同类型的长度单位&#xff0c;比如px,em,rem等。 而整体的长度单位分为两大类&#xff1a;相对长度 和 绝对长度。 2&…

PWA(Progressive Web App)入门系列:Fetch Request Headers Response Body

前言 在 WEB 中&#xff0c;对于网络请求一直使用的是 XMLHttpRequest API 来处理&#xff0c;XMLHttpRequest 也很强大&#xff0c;传统的 Ajax 也是基于此 API 的。那么为什么 W3C 标准中又加入了类似功能的 Fetch API 呢&#xff1f;他有何优势。 Fetch 什么是 Fetch Fet…

CSS3开发总结(圆角、盒阴影、边界图片)

CSS3开发总结&#xff08;圆角&#xff09; 12/100 发布文章 qq_41913971 CSS31&#xff09;圆角 border-radius2&#xff09;盒阴影 box-shadow3&#xff09;边界图片 border-image-source1&#xff09;圆角 border-radius border-radius属性&#xff0c;复合属性。一个最多可…

深入理解Android的startservice和bindservice

一、首先&#xff0c;让我们确认下什么是service&#xff1f; service就是android系统中的服务&#xff0c;它有这么几个特点&#xff1a;它无法与用户直接进行交互、它必须由用户或者其他程序显式的启动、它的优先级比较高&#xff0c; 它比处于前台的应用优先级低&am…

PWA(Progressive Web App)入门系列:Notification

前言 在很多场景下&#xff0c;需要一种通知的交互方式来提醒用户&#xff0c;传统方式下可以在页面实现一个 Dialog&#xff0c;或通过修改网页的 title 来实现消息的通知。然而传统的实现存在着一定的不足&#xff0c;在网页最小化的情况下&#xff0c;无法查看任何通知&…

PWA(Progressive Web App)入门系列:Push

前言 很多时候&#xff0c;原生应用会通过一些消息推送来唤起用户的关注&#xff0c;增加驻留率。网页该怎么做呢&#xff1f;有没有类似原生应用的推送机制&#xff1f;推送功能又能玩出什么花样呢&#xff1f; Push API Push API 给与了 Web 应用程序接收从服务器发出的推送…

Dom学习笔记

DOM document object model 文档 对象 模型 文档&#xff1a;html页面 文档对象&#xff1a;页面中的元素 文档对象模型: 文档对象模型是w3c 为了能够让js去操作页面中的元素&#xff0c;定义的一套标准 DOM会把当前文档看作一棵树 树种的每一个元素就是文档树 的一个节点 同…

PWA(Progressive Web App)入门系列:消息通讯

前言 serviceWorker 的能力决定它要处理的事情&#xff0c;网站页面的部分逻辑处理会转移到 serviceWorker 层进行处理&#xff0c;这里就要页面层和 serviceWorker 层进行交互来实现消息通讯。 下面就说一下两个环境下的消息通讯。 窗口向 serviceWorker 通讯 这里列举出窗…