文档章节

glob匹配模式

前端届的科比
 前端届的科比
发布于 2015/12/11 13:37
字数 1030
阅读 50
收藏 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
深圳
Python中如何遍历指定目录下的所有文件?

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

吃一堑消化不良
2015/09/10
72
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
0
python glob使用

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

牛皮糖
2016/03/25
32
0
.gitignore文件使用说明

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

铭尘沐风
2015/08/01
0
0
【转载】.gitignore 文件使用说明

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

摩云飞
2014/01/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

C++ gflags

gflags是google一个开源的处理命令行参数的库,相比getopt,更加容易使用。 定义参数 gflags主要支持的参数类型包括 DEFINEbool: boolean DEFINEint32: 32-bit integer DEFINEint64: 64-bit ...

SibylY
29分钟前
0
0
intellij IDEA Properties中文unicode转码问题

在IDEA中创建了properties文件,发现默认中文不会自动进行unicode转码。如下 在project settings - File Encoding,在标红的选项上打上勾,确定即可 效果图如下: unicode转码后效果...

muzi1994
29分钟前
0
0
Java IO类库之PipedWriter

一、PipedWriter介绍 PipedWriter是字符管道输出流,继承自Writer,功能与PipedOutputStream类似,通过与PipedReader组合使用实现类似管道的功能,在多线程环境下,一个线程使用PipedWriter...

老韭菜
34分钟前
0
0
精简分页组件(手写)

需要引入CSS(没错就是这4行) .pagelist { text-align: center; color: #666; width: 100%; clear: both; margin: 20px 0; padding-top: 20px }.pagelist a { color: #666; margin: 0 2px;......

AK灬
34分钟前
3
0
29 岁成为阿里巴巴 P8,工作前 5 年完成晋升 3 连跳,他如何做到?

泡泡是我的好朋友。今年 31 岁,毕业后就进了阿里巴巴,工作五年内从 P4 晋升至 P6、P7、P8。 和他很少聊到工作,但总觉得他有很棒的职场心得,应该分享出来,于是有了这次采访。希望对职场新...

Java填坑之路
36分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部