本節咱們來學習 Gulp
中的 globs
的匹配規則。glob
是由普通字符或通配字符組成的字符串,用於匹配文件路徑。咱們能夠使用一個或多個 glob
匹配規則在文件系統中定位文件。css
src()
方法須要一個 glob
字符串或一個 glob
字符串組成的數組來做爲參數,肯定哪些文件須要被操做。html
gulp.src(globs[, options])
globs
:文件匹配模式,相似於正則表達式,用來匹配文件路徑。options
:可選參數,一般狀況不須要用到。gulp.src('./js/*.js') // * 匹配js文件夾下全部.js格式的文件 gulp.src('./js/**/*.js') // ** 匹配js文件夾的0個或多個子文件夾 gulp.src(['./js/*.js','!./js/index.js']) // ! 匹配除了index.js以外的全部js文件 gulp.src('./js/**/{omui,common}.js') // {} 匹配{}裏的文件名
gulp
內部使用了 node-glob
模塊來實現其文件匹配功能。咱們能夠使用下面這些特殊的字符來匹配咱們想要的文件。node
單匹配模式:正則表達式
匹配符 | 描述 |
---|---|
* | 匹配文件路徑中的 0 個或多個字符,但不會匹配路徑分隔符,除非路徑分隔符出如今末尾 |
** | 匹配路徑中的 0 個或多個目錄及其子目錄 |
? | 匹配方括號中出現的字符中的任意一個 |
[...] | 匹配方括號中出現的字符中的任意一個 |
多匹配模式,同時使用多種匹配:gulp
表達式 | 描述 | ||
---|---|---|---|
!(pattern\ | pattern\ | pattern) | 匹配任何與括號中給定的任一模式都不匹配的 |
?(pattern\ | pattern\ | pattern) | 匹配括號中給定的任一模式0次或1次 |
+(pattern\ | pattern\ | pattern) | 匹配括號中給定的任一模式至少1次 |
*(pattern\ | pattern\ | pattern) | 匹配括號中給定的任一模式0次或屢次 |
@(pattern\ | pattern\ | pattern) | 匹配括號中給定的任一模式1次 |
若是有多種匹配模式時,咱們能夠在 src()
方法中使用數組。數組
js
、css
、html
三種文件:gulp.src(['js/*.js', 'css/*.css', '*.html'])
!
符號便是排除模式,,它會在匹配的結果中排除這個匹配,要注意一點的是不能在數組中的第一個元素中使用排除模式gulp.src([*.js,'!b*.js']) // 匹配全部js文件,但排除掉以b開頭的js文件 gulp.src(['!b*.js',*.js]) // 不排除任何文件,由於排除模式不能出如今數組的第一個元素中
此外,還能夠使用展開模式。展開模式以花括號 {}
做爲定界符,根據它裏面的內容,會展開爲多個模式,最後匹配的結果爲全部展開的模式相加起來獲得的結果。學習
展開的例子以下:ui
a{b,c}d
: 會展開爲 abd
,acd
。a{b,}c
:會展開爲 abc
,ac
。a{0..3}d
:會展開爲 a0d
,a1d
,a2d
,a3d
。a{b,c{d,e}f}g
:會展開爲 abg
,acdfg
,acefg
。a{b,c}d{e,f}g
:會展開爲 abdeg
,acdeg
,abdeg
,abdfg
。字符串片斷是指兩個分隔符之間的全部字符組成的字符串,在 globs
中,分隔符永遠是 /
字符,不區分操做系統,即便是在採用 \\
做爲分隔符的 Windows
操做系統中也是如此。在 globs
中,\\
字符被保留做爲轉義字符使用。操作系統
若是 *
符號被轉義,那麼 *
將被做爲一個普通字符使用,而再也不是通配符:3d
'glob_with_uncommon_\\*_character.js'
避免使用 Node
的 path
類方法來建立 globs
,例如 path.join
。
在 Windows
中,因爲 Node
使用 \\
字符做爲路徑分隔符,所以將會產生一個無效的 globs
。還要避免使用 __dirname
和 __filename
全局變量,因爲一樣的緣由,process.cwd()
方法也要避免使用。
const invalidGlob = path.join(__dirname, 'src/*.js');