GULP入門之API(二)

GULP的API

gulp.src(globs[, options])  

輸出(Emits)符合所提供的匹配模式(glob)或者匹配模式的數組(array of globs)的文件。 將返回一個 Vinyl files 的 stream 它能夠被 piped 到別的插件中。html

gulp.src('client/templates/*.jade')
  .pipe(jade())
  .pipe(minify())
  .pipe(gulp.dest('build/minified_templates'));

globs:類型: String 或 Array   所要讀取的 glob 或者包含 globs 的數組

options.buffer:類型: Boolean 默認值: true   若是該項被設置爲 false,那麼將會以 stream 方式返回 file.contents 而不是文件 buffer 的形式。這在處理一些大文件的時候將會頗有用。**注意:**插件可能並不會實現對 stream 的支持。

options.read:類型: Boolean 默認值: true   若是該項被設置爲 false, 那麼 file.contents 會返回空值(null),也就是並不會去讀取文件。

options.base:類型: String 默認值: 將會加在 glob 以前 (請看 glob2base

如, 請想像一下在一個路徑爲 client/js/somedir 的目錄中,有一個文件叫 somefile.js :node

gulp.src('client/js/**/*.js') // 匹配 'client/js/somedir/somefile.js' 而且將 `base` 解析爲 `client/js/`
  .pipe(minify())
  .pipe(gulp.dest('build'));  // 寫入 'build/somedir/somefile.js'

gulp.src('client/js/**/*.js', { base: 'client' })
  .pipe(minify())
  .pipe(gulp.dest('build'));  // 寫入 'build/js/somedir/somefile.js'

 

gulp.dest(path[, options])

能被 pipe 進來,而且將會寫文件。而且從新輸出(emits)全部數據,所以你能夠將它 pipe 到多個文件夾。若是某文件夾不存在,將會自動建立它。git

gulp.src('./client/templates/*.jade')
  .pipe(jade())
  .pipe(gulp.dest('./build/templates'))
  .pipe(minify())
  .pipe(gulp.dest('./build/minified_templates'));

文件被寫入的路徑是以所給的相對路徑根據所給的目標目錄計算而來。相似的,相對路徑也能夠根據所給的 base 來計算。 請查看上述的 gulp.src 來了解更多信息。github

path:類型: String or Function 文件將被寫入的路徑(輸出目錄)。也能夠傳入一個函數,在函數中返回相應路徑,這個函數也能夠由 vinyl 文件實例 來提供。

options.cwd:類型: String 默認值: process.cwd() 輸出目錄的 cwd 參數,只在所給的輸出目錄是相對路徑時候有效。

options.mode:類型: String 默認值: 0777   八進制權限字符,用以定義全部在輸出目錄中所建立的目錄的權限。

 

gulp.task(name[, deps], fn)

定義一個使用 Orchestrator 實現的任務(task)shell

gulp.task('somename', function() {
  // 作一些事
});

name 任務的名字,若是你須要在命令行中運行你的某些任務,那麼,請不要在名字中使用空格。

deps 類型: Array 一個包含任務列表的數組,這些任務會在你當前任務運行以前完成。

gulp.task('mytask', ['array', 'of', 'task', 'names'], function() {
  // 作一些事
});

注意: 你的任務是否在這些前置依賴的任務完成以前運行了?請必定要確保你所依賴的任務列表中的任務都使用了正確的異步執行方式:使用一個 callback,或者返回一個 promise 或 stream。gulp

fn 該函數定義任務所要執行的一些操做。一般來講,它會是這種形式:gulp.src().pipe(someplugin())

異步任務支持 任務能夠異步執行,若是 fn 能作到如下其中一點:

接受一個 callback
// 在 shell 中執行一個命令
var exec = require('child_process').exec;
gulp.task('jekyll', function(cb) {
  // 編譯 Jekyll
  exec('jekyll build', function(err) {
    if (err) return cb(err); // 返回 error
    cb(); // 完成 task
  });
});
返回一個 stream
gulp.task('somename', function() {
  var stream = gulp.src('client/**/*.js')
    .pipe(minify())
    .pipe(gulp.dest('build'));
  return stream;
});
返回一個 promise
var Q = require('q');

gulp.task('somename', function() {
  var deferred = Q.defer();

  // 執行異步的操做
  setTimeout(function() {
    deferred.resolve();
  }, 1);

  return deferred.promise;
});

對於這個例子,讓咱們先假定你有兩個 task,"one" 和 "two",而且你但願它們按照這個順序執行:api

  1. 在 "one" 中,你加入一個提示,來告知何時它會完成:能夠再完成時候返回一個 callback,或者返回一個 promise 或 stream,這樣系統會去等待它完成。數組

  2. 在 "two" 中,你須要添加一個提示來告訴系統它須要依賴第一個 task 完成。promise

所以,這個例子的實際代碼將會是這樣:異步

var gulp = require('gulp');

// 返回一個 callback,所以系統能夠知道它何時完成
gulp.task('one', function(cb) {
    // 作一些事 -- 異步的或者其餘的
    cb(err); // 若是 err 不是 null 或 undefined,則會中止執行,且注意,這樣表明執行失敗了
});

// 定義一個所依賴的 task 必須在這個 task 執行以前完成
gulp.task('two', ['one'], function() {
    // 'one' 完成後
});

gulp.task('default', ['one', 'two']);

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

監視文件,而且能夠在文件發生改動時候作一些事情。它總會返回一個 EventEmitter 來發射(emit) change 事件。

var watcher = gulp.watch('js/**/*.js', ['uglify','reload']);
watcher.on('change', function(event) {
  console.log('File ' + event.path + ' was ' + event.type + ', running tasks...');
});
gulp.watch('js/**/*.js', function(event) {
  console.log('File ' + event.path + ' was ' + event.type + ', running tasks...');
});
//event.type 發生的變更的類型:,  或者 。//event.path 觸發了該事件的文件的路徑。
addedchangeddeleted
相關文章
相關標籤/搜索