1. 程式人生 > >構建工具gulp之主要API

構建工具gulp之主要API

上期回顧:構建工具gulp之入門指南

上期我們瞭解了gulp的一些入門知識,本期將進一步瞭解gulp,為大家講述gulp之主要API的內容。

 

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引數萬用字元路徑匹配規則如下:

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:設定輸出路徑以某個路徑的某個組成部分為基礎向後拼接;

 

gulp.dest(path[, options])

dest方法是指定處理完後文件輸出的路徑;

gulp.src('images/*.{png,jpg,gif,ico}')

    .pipe(imagemin())

    .pipe(gulp.dest('dist/images'));

path 檔案將被寫入的路徑(輸出目錄)。也可以傳入一個函式,在函式中返回相應路徑;

options  配置物件,有2個屬性cwd、mode;

options.cwd:型別:String,預設:process.cwd():前指令碼的工作目錄的路徑 當檔案輸出路徑為相對路徑將會用到;

options.mode:型別:String,預設:0777 指定被建立資料夾的許可權;

 

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

})

f該函式定義任務所需要執行的一些操作。通常來說,它會是這樣中形式

gulp.src().pipe(taskFn())

 

gulp.watch(glob [, opts], tasks)

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也算是掌握了。 下一篇文章我們將逐步去了解各種任務的外掛使用。

    

下期預告

gulp教程之靜態資源壓縮