構建工具gulp之主要API
構建工具gulp之主要API
1. gulp.src(globs[,options])
src
方法用於產生資料流。它的引數表示所要處理的檔案,這些指定的檔案會轉換成資料流。
src
方法的引數可以是一個字串:
gulp.src(‘images/*.{png,jpg,gif,ico}‘)
.pipe(imagemin())
.pipe(gulp.dest(‘dist/images‘));
src
方法的引數還可以是一個數組,用來指定多個成員:
gulp.src([‘js/**/*.js‘,‘!js/**/*.min.js‘])
● globs引數萬用字元路徑匹配規則如下:
js/app.js
*
:匹配所有檔案,例:src/*.js(包含src下的所有js檔案);
**
:匹配0個或多個子資料夾,例:src/**/*.js(包含src下0個或多個子資料夾下的js檔案);
{}
:匹配多個屬性,例:src/{a,b}.js(包含a.js和b.js檔案),src/*.{jpg,png,gif}(src下的所有jpg/png/gif檔案);
!
:排除檔案,例:!src/a.js(不包含src下的a.js檔案);
?
:匹配檔案路徑中的一個字元,例:js/a?.js 能匹配 js/ab.js,不能匹配 js/a.js;
[...]
:匹配方括號中出現的字元中的任意一個,當方括號中第一個字元為^或!時,則表示不匹配方括號中出現的其他字元中的任意一個,類似js正則表示式中的用法。例:js/a[0-3].js
,匹配js目錄下以a開頭,第二個字元為0-3之間(包括0和3)的js檔案。若改為 ["js/[^ab].js"],則匹配 js/c.js,不匹配 js/cd.js、js/ac.js;
?(pattern|pattern|pattern)
:匹配多個 pattern 中 0 或 1 個(精確匹配,不可以組合)。例:js/?(a|b).js,匹配 js 目錄下的 a.js、b.js,不匹配 ab.js
+(pattern|pattern|pattern)
:至少匹配多個 pattern 中的一個。例:js/+(a|b)b.js,匹配 js 目錄下的 ab.js、bb.js、ababab.js,不能匹配 abcd.js(也就是說:只允許匹配出現在範圍內的字元) ,也不能像 js/*(a|b)b.js 那樣匹配 b.js。
*(a|b|c)
:匹配括號中多個 pattern 中0或任意多個(pattern可相互組合)。例:js/*(a|b|c).js,匹配 js 目錄下的 a.js、ab.js、abc.js、ba.js,不匹配 abcd.js(也就是說:只允許匹配出現在範圍內的字元)。
@(pattern|pattern|pattern)
:匹配多個 pattern 中的任意一個(即不可以組合,且不能為空或大於1個)。例:js/@(a|b)b.js,匹配 js 目錄下的 ab.js、bb.js,不匹配 b.js、abb.js、abc.js。
● options型別(可選),有3個屬性buffer、read、base;
options.buffer
:(預設:true)設定為false,將返回file.content的流並且不緩衝檔案,處理大檔案時非常有用;
options.read
:(預設:true)設定false,將不執行讀取檔案操作,返回null;
options.base
:設定輸出路徑以某個路徑的某個組成部分為基礎向後拼接;
2. gulp.dest(path[,options])
dest方法是指定處理完後文件輸出的路徑;
gulp.src(‘images/*.{png,ico}‘)
.pipe(imagemin())
.pipe(gulp.dest(‘dist/images‘));
●path
檔案將被寫入的路徑(輸出目錄)。也可以傳入一個函式,在函式中返回相應路徑;
●options
配置物件,有2個屬性cwd、mode;
options.cwd
:型別:String,預設:process.cwd():前指令碼的工作目錄的路徑 當檔案輸出路徑為相對路徑將會用到;
options.mode
:型別:String,預設:0777 指定被建立資料夾的許可權;
3. gulp.task(name[,deps],fn)
task
定義一個gulp
任務;
gulp.task(‘taskname‘,function() {
// do something
});
●name
任務的名字,如果你需要在命令列中執行你的某些任務,那麼,請不要在名字中使用空格。
●deps
一個包含任務列表的陣列,這些任務會在你當前任務執行之前完成。
gulp.task(‘mytask‘,[‘array‘,‘of‘,‘task‘,‘names‘],function() {
// do something
})
fn 該函式定義任務所需要執行的一些操作。通常來說,它會是這樣中形式
gulp.src().pipe(taskFn())
4. gulp.watch(glob [,opts],tasks)/gulp.watch(glob [,opts,cb])
watch監視檔案,並且可以在檔案發生改動時候做一些事情。
●glob
需要處理的原始檔匹配符路徑
●opts
型別(可選):Object 具體參看gaze https://github.com/shama/gaze
●tasks
型別(Array):需要在檔案變動後執行的一個或者多個通過 gulp.task() 建立的 task 的名字
●cb(event)
型別(可選):Function 每個檔案變化執行的回撥函式,callback 會被傳入一個名為 event 的物件,這個物件描述了所監控到的變動
gulp.watch(‘js/**/*.js‘,function(event) {
console.log(‘File ‘ + event.path + ‘ was ‘ + event.type + ‘,running tasks...‘);
});
event.type
發生的變動的型別:added,changed 或者 deleted。
event.path
觸發了該事件的檔案的路徑。
本文中主要把gulp的api介紹完了,基本上gulp也算是掌握了。 下一篇文章我們將逐步去了解各種任務的外掛使用。