本節我們來看一下 Gulp 中的 API 方法,如下所示: | 方法 | 描述 | | -------------------- | ------------------------------------------------------------ | | src() | 創建用於從文件系統讀取 Vinyl 對象的流 | | dest() | 創建一個用於將 Vinyl 對象寫入到文件系統的流 | | symlink() | 創建一個流(stream),用於連接 Vinyl 對象到文件系統 | | lastRun() | 檢索在當前運行進程中成功完成任務的最後一次時間 | | series() | 將任務函數和/或組合操作組合成更大的操作,這些操作將按順序依次執行 | | parallel() | 將任務功能和/或組合操作組合成同時執行的較大操作 | | watch() | 監聽 globs 並在發生更改時運行任務 | | task() | 在任務系統中定義任務 | | registry() | 允許將自定義的註冊表插入到任務系統中,以期提供共享任務或增強功能 | | tree() | 獲取當前任務依賴關係樹——在極少數情況下需要它 | | Vinyl | 虛擬的文件格式 | | Vinyl.isVinyl() | 檢測一個對象(object)是否是一個 Vinyl 實例 | | Vinyl.isCustomProp() | 確定一個屬性是否由 Vinyl 在內部進行管理 |
我們在使用 gulp 時,一般只需要用到 4 個 API,分別是 gulp.src()、gulp.dest()、gulp.task()、gulp.watch(),下面我們詳細介紹一個這 4 個常用 API 的使用。
gulp.src()方法
gulp.src() 方法用於創建一個流。但是要注意的是這個流裏的內容不是原始的文件流,而是一個虛擬文件對象流(vinyl files),這個虛擬文件對象中存儲着原始文件的路徑、文件名、內容等信息。
語法如下所示:
gulp.src(globs, [options])
- globs :文件匹配模式(類型正則表達式),用來匹配文件路徑(包括文件名),也可以直接指定某個具體的文件路徑。
- options:可選參數,通常情況下不需要用到。
示例:
例如下面這個例子,將 input 文件夾中的 .js 文件複製到 output 文件夾中:
const { src, dest } = require('gulp');
function copy() {
return src('input/*.js')
.pipe(dest('output/'));
}
exports.copy = copy;
執行 gulp copy 命令後,文件成功被複制。
gulp.dest()方法
gulp.dest() 方法可以創建一個用於將 Vinyl 對象寫入到文件系統的流。
語法如下:
gulp.dest(path[ , options])
- path:爲寫入文件的路徑。
- options:可選的參數對象,通常用不到。
gulp.dest() 方法是和 gulp.src() 方法搭配使用的,例如上述這個複製文件的示例。
gulp 的使用流程一般是,首先通過 gulp.src() 方法獲取我們想要處理的文件流,然後把文件流通過 pipe 方法導入到 gulp 插件中,最後把經過插件處理後的流再通過 pipe 方法導入到 gulp.dest() 中,gulp.dest() 方法則把流中的內容寫入到文件中。
注意,給 gulp.dest() 傳入的路徑參數,只能用來指定要生成的文件的目錄,而不能指定生成文件的文件名,它生成文件的文件名使用的是導入到它的文件流自身的文件名,所以生成的文件名是由導入到它的文件流決定的。
gulp.task()方法
gulp.task() 方法用於在任務系統中定義任務,然後可以從命令行和 series()、parallel()、lastrun() 等 API 訪問該定義好的任務。
語法如下所示:
gulp.task( name [ , deps ] , fn )
- name:任務名。
- deps:是當前定義的任務需要依賴的其他的任務,爲一個數組。當前定義的任務會在所有依賴的任務執行完畢後纔開始執行。如果沒有依賴,則可以省略這個參數。
- fn:可選參數,爲任務函數,我們把任務要執行的代碼都寫在裏面。
示例:
task() 方法的用法有下面幾種:
- 將命名函數註冊爲任務,其中函數名 test 就是任務名:
const { task } = require('gulp');
function test(cb) {
console.log("命令函數")
cb();
}
task(test);
- 將匿名函數註冊爲任務:
const { task } = require('gulp');
task('test', function(cb) {
console.log("匿名函數")
cb();
});
- 檢索先前已註冊的任務:
const { task } = require('gulp');
task('test', function(cb) {
cb();
});
const test = task('test');
gulp.watch()方法
gulp.watch() 方法用來監視文件的變化,當文件發生變化後,我們可以利用它來執行相應的任務,例如文件壓縮等。
語法如下所示:
gulp.watch(glob [ , opts] , tasks)
- glob:爲要監視的文件匹配模式,規則和用法與 gulp.src()方法中的glob相同。
- opts:爲一個可選的配置對象,通常不需要用到。
- tasks:爲文件變化後要執行的任務,爲一個數組。
示例:
例如使用 gulp.watch 語句監聽文件變化:
const { watch } = require('gulp');
watch(['input/*.js', '!input/one.js'], function(cb) {
cb();
});