文档章节

glob匹配模式

前端届的科比
 前端届的科比
发布于 2015/12/11 13:37
字数 1030
阅读 48
收藏 0
点赞 0
评论 0

参考资料:http://fis.baidu.com/fis3/docs/api/config-glob.html

glob

FIS3 中支持的 glob 规则,FIS3 使用 node-glob 提供 glob 支持。

简要说明

node-glob 中的使用方式有很多,如果要了解全部,请前往 node-glob

这里把常用的一些用法做说明。

  • * 匹配0或多个除了 / 以外的字符
  • ? 匹配单个除了 / 以外的字符
  • ** 匹配多个字符包括 /
  • {} 可以让多个规则用 , 逗号分隔,起到或者的作用
  • ! 出现在规则的开头,表示取反。即匹配不命中后面规则的文件

需要注意的是,fis 中的文件路径都是以 / 开头的,所以编写规则时,请尽量严格的以 / 开头。

当设置规则时,没有严格的以 / 开头,比如 a.js, 它匹配的是所有目录下面的 a.js, 包括:/a.js/a/a.js/a/b/a.js。 如果要严格只命中根目录下面的 /a.js, 请使用 fis.match('/a.js')

另外 /foo/*.js, 只会命中 /foo 目录下面的所有 js 文件,不包含子目录。 而 /foo/**/*.js 是命中所有子目录以及其子目录下面的所有 js 文件,不包含当前目录下面的 js 文件。 如果需要命中 foo 目录下面以及所有其子目录下面的 js 文件,请使用 /foo/**.js

扩展的规则

  1. 假设匹配 widget 目录下以及其子目录下的所有 js 文件,使用 node-glob 需要这么写
widget/{*.js,**/*.js}

这样写起来比较麻烦,所以扩展了这块的语法,以下方式等价于上面的用法

widget/**.js
  1. node-glob 中没有捕获分组,而 fis 中经常用到分组信息,如下面这种正则用法:
// 让 a 目录下面的 js 发布到 b 目录下面,保留原始文件名。
fis.match(/^\/a\/(.*\.js$)/i, {
  release: '/b/$1'
});

由于原始 node-glob 不支持捕获分组,所以做了对括号用法的扩展,如下用法和正则用法等价。

// 让 a 目录下面的 js 发布到 b 目录下面,保留原始文件名。
fis.match('/a/(**.js)', {
  release: '/b/$1'
});

特殊用法(类 css 伪类)

  1. ::package 用来匹配 fis 的打包过程。
  2. ::text 用来匹配文本文件。
默认识别这类后缀的文件。

```js
[
  'css', 'tpl', 'js', 'php',
  'txt', 'json', 'xml', 'htm',
  'text', 'xhtml', 'html', 'md',
  'conf', 'po', 'config', 'tmpl',
  'coffee', 'less', 'sass', 'jsp',
  'scss', 'manifest', 'bak', 'asp',
  'tmp', 'haml', 'jade', 'aspx',
  'ashx', 'java', 'py', 'c', 'cpp',
  'h', 'cshtml', 'asax', 'master',
  'ascx', 'cs', 'ftl', 'vm', 'ejs',
  'styl', 'jsx', 'handlebars'
]
```

如果你希望命中的文件类型不在列表中,请通过 `fis.set('project.fileType.text')` 扩展,多个后缀用 `,` 分割。

```
fis.set('project.fileType.text', 'cpp,hhp');
```
  1. ::image 用来匹配文件类型为图片的文件。
默认识别这类后缀的文件。

```js
[
  'svg', 'tif', 'tiff', 'wbmp',
  'png', 'bmp', 'fax', 'gif',
  'ico', 'jfif', 'jpe', 'jpeg',
  'jpg', 'woff', 'cur', 'webp',
  'swf', 'ttf', 'eot', 'woff2'
]
```

如果你希望命中的文件类型不在列表中,请通过 `fis.set('project.fileType.image')` 扩展,多个后缀用 `,` 分割。

```
fis.set('project.fileType.image', 'raw,bpg');
```
  1. *.html:js 用来匹配命中的 html 文件中的内嵌的 js 部分。
fis3 htmlLike 的文件内嵌的 js 内容也会走单文件编译流程,默认只做标准化处理,如果想压缩,可以进行如下配置。

```js
fis.match('*.html:js', {
    optimizer: fis.plugin('uglify-js')
});
```
  1. *.html:css 用来匹配命中的 html 文件中内嵌的 css 部分。
fis3 htmlLike 的文件内嵌的 css 内容也会走单文件编译流程,默认只做标准化处理,如果想压缩,可以进行如下配置。

```js
fis.match('*.html:css', {
    optimizer: fis.plugin('clean-css')
});
```

注意事项

node-glob 扩展分组功能确实还存在缺陷。分组 () 与 或{} 搭配使用时存在问题。

比如: /a/({b,c}/**.js) 会拆分成并列的两个规则 /a/(b/**.js)/a/(c/**.js),当这两个合成一个正则的时候,这个时候问题来了, 一个分组变成了两个分组,分组 1 为 (b/**.js) 分组 2 为 (c/**.js)。那么当希望获取捕获信息时,不能按原来的分组序号去获取了。

// 错误
fis.match('/a/({b,c}/**.js)', {
  release: '/static/$1'
});

// 正确
fis.match('/a/({b,c}/**.js)', {
  release: '/static/$1$2'
});

本文转载自:http://fis.baidu.com/fis3/docs/api/config-glob.html

共有 人打赏支持
前端届的科比
粉丝 21
博文 64
码字总数 51572
作品 0
深圳
PHP glob() 函数

定义和用法 glob() 函数返回匹配指定模式的文件名或目录。 该函数返回一个包含有匹配文件 / 目录的数组。如果出错返回 false。 语法 glob(pattern,flags) 参数 描述 file 必需。规定检索模式...

BearCatYN ⋅ 2014/10/11 ⋅ 0

Python中如何遍历指定目录下的所有文件?

例如:在C:TDDOWNLOAD目录下有a.txt、b.txt两个文件,另有sub1子文件夹,C:TDDOWNLOADsub1下又有c.txt、d.txt两个文件。 1. os.walk os.walk()返回一个三元素的tuple:当前路径、子文件夹名称...

吃一堑消化不良 ⋅ 2015/09/10 ⋅ 0

python glob使用

glob模块 * 使用Unix Shell规则来寻找文件名匹配某一模式的文件.glob中模式规则不是正则表达式, 而是, 符合标准Uinx路径扩展规则. 但是Shell变量名和符号(~)是不被扩充的, 只有一些特殊的字符...

牛皮糖 ⋅ 2016/03/25 ⋅ 0

【linux】grep 和【perl】 脚本实现的grep功能的运行时间差异

参考在网上找到的代码,没想到相差那么大,应该是grep比perl的模式匹配更快吧。 [gzhy@nearby stat]$ wc -l 1234033 1[gzhy@nearby stat]$ perl 1.plcost 1 secondszjtel : 32606[gzhy@nearb...

SibylY ⋅ 2014/12/04 ⋅ 0

.gitignore文件使用说明

一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,像是日志或者编译过程中创建的等等。我们可以创建一个名为 的文件,列出要忽略的...

铭尘沐风 ⋅ 2015/08/01 ⋅ 0

【转载】.gitignore 文件使用说明

一般来说,我们总会遇到有些文件无需纳入 Git 管理的情况,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,像是日志或者编译过程中创建的文件等等。我们可以创建一个名为 ...

摩云飞 ⋅ 2014/01/06 ⋅ 0

Github Pls Forget Me —— .gitignore详解

忽略某些文件 一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。我们可以创建一个...

tommyfok ⋅ 2014/08/04 ⋅ 0

git-忽略指定文件

git-忽略指定文件 软件版本:   操作系统:ubuntu10.04   内核版本:Linux version 2.6.32-36-generic git 版本:git version 1.7.0.4 目录:   1. 介绍   2. 全局与局部     2...

非沧海一粟不随波逐流 ⋅ 2016/12/02 ⋅ 0

git add 如何忽略文件 .gitignore

通过.gitignore文件忽略 项目中创建一个文件.gitignore 所有空行或者以注释符号 # 开头的行都会被 Git 忽略。 可以使用标准的 glob 模式匹配。 匹配模式最后跟反斜杠(/)说明要忽略的是目录...

南寒之星 ⋅ 2015/11/30 ⋅ 0

工作日志-W1444

1、robocopy : 复制文件和目录树的高级使用程序(windows下) 2、rsync:类unix下快速数据镜像备份工具-remote sync 3、【perl】File::Path mkpath 、rmtree分别为创建目录和删除目录,perl自...

SibylY ⋅ 2014/10/29 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

R计算IV

参考文章 #读取文件 rawdata = read.csv("/path/to/csv/file",header=T) colnames(rawdata)[18] <- "y" //重命名因变量y #数据分区 训练集测试集 trainIdx <- sample(nrow(rawdata), round(......

火力全開 ⋅ 13分钟前 ⋅ 0

SQL老司机,在SQL中计算 array & map & json数据

摘要: 场景 通常,我们处理数据,一列数据类型要么是字符串,要么是数字,这些都是primitive类型的数据。 场景 通常,我们处理数据,一列数据类型要么是字符串,要么是数字,这些都是primi...

阿里云云栖社区 ⋅ 13分钟前 ⋅ 0

SQL老司机,在SQL中计算 array & map & json数据

摘要: 场景 通常,我们处理数据,一列数据类型要么是字符串,要么是数字,这些都是primitive类型的数据。 场景 通常,我们处理数据,一列数据类型要么是字符串,要么是数字,这些都是primi...

猫耳m ⋅ 23分钟前 ⋅ 0

关于ireport自定义变量类型为list的时候

自己摸石头过河,我真的应该去趟市中心图书馆,借本真正靠谱的教材 网上的东西,只有0.01%是有用的,还有0.99%是垃圾,剩下的99%是垃圾的复制品。。 哎!~ 问题是这样的,报表带sql,从db中获...

炑炑milina ⋅ 24分钟前 ⋅ 0

Spring mvc ContextLoaderListener 原理解析

对于熟悉Spring MVC功能,首先应从web.xml 开始,在web.xml 文件中我们需要配置一个监听器 ContextLoaderListener,如下。 <!-- 加载spring上下文信息,最主要的功能是解析applicationContex...

轨迹_ ⋅ 25分钟前 ⋅ 0

阿里云发布企业数字化及上云外包平台服务:阿里云众包平台

摘要: 阿里云正式发布旗下众包平台业务(网址:https://zhongbao.aliyun.com/),支持包括:网站定制开发,APP、电商系统等软件开发,商标、商品LOGO、VI、产品包装设计、营销推广、大数据人...

阿里云官方博客 ⋅ 26分钟前 ⋅ 0

Redis安装异常解决办法

官网地址:http://redis.io/ 官网下载地址:http://redis.io/download 1. 下载Redis源码(tar.gz),并上传到Linux 2. 解压缩包:tar zxvf redis-2.8.17.tar.gz 3. 进入解压缩后的文件夹:c...

slagga ⋅ 31分钟前 ⋅ 0

006. 深入JVM学习—年轻代

1. 年轻代图片 年轻代(Young)属于JVM堆内存空间的一个组成部分 所有使用关键字new新实例化的对象一定会在伊甸园区进行保存,而对于存活区保存的一定是已经在伊甸园区存在一段时间并且经过了...

影狼 ⋅ 32分钟前 ⋅ 0

如何成为一个合格的程序员

偶尔的,我会被人问道:如何成为一名优秀的程序员,更或者,如何成为一名程序员。每次人们问起,我都力图给出不同的答案。因此,我的答案是各种各样的。下面就是我认为的成为一名优秀的程序员...

柳猫 ⋅ 33分钟前 ⋅ 0

cups error_log日志暴增

日志内容 File \"/usr/lib/cups/notifier/dbus\" has insecure permissions 解决(未验证适用范围) sudo service cups stopsudo rm /etc/cups/subscriptions.conf*sudo rm -r /var/cac......

一介码夫_Hum ⋅ 36分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部