FIS3 中支持的 glob 規則,FIS3 使用 node-glob 提供 glob 支持。css
node-glob 中的使用方式有不少,若是要了解所有,請前往 node-glob。html
這裏把經常使用的一些用法作說明。java
*
匹配0或多個除了 /
之外的字符?
匹配單個除了 /
之外的字符**
匹配多個字符包括 /
{}
可讓多個規則用 ,
逗號分隔,起到或者
的做用!
出如今規則的開頭,表示取反。即匹配不命中後面規則的文件須要注意的是,fis 中的文件路徑都是以 /
開頭的,因此編寫規則時,請儘可能嚴格的以 /
開頭。node
當設置規則時,沒有嚴格的以 /
開頭,好比 a.js
, 它匹配的是全部目錄下面的 a.js
, 包括:/a.js
、/a/a.js
、/a/b/a.js
。 若是要嚴格只命中根目錄下面的 /a.js
, 請使用 fis.match('/a.js')
。git
另外 /foo/*.js
, 只會命中 /foo
目錄下面的全部 js 文件,不包含子目錄。 而 /foo/**/*.js
是命中全部子目錄以及其子目錄下面的全部 js 文件,不包含當前目錄下面的 js 文件。 若是須要命中 foo
目錄下面以及全部其子目錄下面的 js 文件,請使用 /foo/**.js
。github
widget
目錄下以及其子目錄下的全部 js 文件,使用 node-glob
須要這麼寫widget/{*.js,**/*.js}
這樣寫起來比較麻煩,因此擴展了這塊的語法,如下方式等價於上面的用法web
widget/**.js
node-glob
中沒有捕獲分組,而 fis 中常常用到分組信息,以下面這種正則用法:// 讓 a 目錄下面的 js 發佈到 b 目錄下面,保留原始文件名。 fis.match(/^\/a\/(.*\.js$)/i, { release: '/b/$1' });
因爲原始 node-glob
不支持捕獲分組,因此作了對括號用法的擴展,以下用法和正則用法等價。json
// 讓 a 目錄下面的 js 發佈到 b 目錄下面,保留原始文件名。 fis.match('/a/(**.js)', { release: '/b/$1' });
::package
用來匹配 fis 的打包過程。::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'); ```
::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'); ```
*.html:js
用來匹配命中的 html 文件中的內嵌的 js 部分。fis3 htmlLike 的文件內嵌的 js 內容也會走單文件編譯流程,默認只作標準化處理,若是想壓縮,能夠進行以下配置。 ```js fis.match('*.html:js', { optimizer: fis.plugin('uglify-js') }); ```
*.html:css
用來匹配命中的 html 文件中內嵌的 css 部分。fis3 htmlLike 的文件內嵌的 css 內容也會走單文件編譯流程,默認只作標準化處理,若是想壓縮,能夠進行以下配置。 ```js fis.match('*.html:css', { optimizer: fis.plugin('clean-css') }); ```
給 node-glob 擴展分組功能確實還存在缺陷。分組 ()
與 或{}
搭配使用時存在問題。api
好比: /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' });