輸出(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'));
String
或 Array
所要讀取的 glob 或者包含 globs 的數組Boolean
默認值: true 若是該項被設置爲 false
,那麼將會以 stream 方式返回 file.contents
而不是文件 buffer 的形式。這在處理一些大文件的時候將會頗有用。**注意:**插件可能並不會實現對 stream 的支持。
Boolean
默認值: true 若是該項被設置爲 false
, 那麼 file.contents
會返回空值(null),也就是並不會去讀取文件。
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'
能被 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
String
or Function 文件將被寫入的路徑(輸出目錄)。也能夠傳入一個函數,在函數中返回相應路徑,這個函數也能夠由 vinyl 文件實例 來提供。
String
默認值: process.cwd()
輸出目錄的 cwd
參數,只在所給的輸出目錄是相對路徑時候有效。String
默認值: 0777 八進制權限字符,用以定義全部在輸出目錄中所建立的目錄的權限。
定義一個使用 Orchestrator 實現的任務(task)shell
gulp.task('somename', function() { // 作一些事 });
Array 一個包含任務列表的數組,這些任務會在你當前任務運行以前完成。
gulp.task('mytask', ['array', 'of', 'task', 'names'], function() { // 作一些事 });
注意: 你的任務是否在這些前置依賴的任務完成以前運行了?請必定要確保你所依賴的任務列表中的任務都使用了正確的異步執行方式:使用一個 callback,或者返回一個 promise 或 stream。gulp
gulp.src().pipe(someplugin())
。fn
能作到如下其中一點:// 在 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 }); });
gulp.task('somename', function() { var stream = gulp.src('client/**/*.js') .pipe(minify()) .pipe(gulp.dest('build')); return stream; });
var Q = require('q'); gulp.task('somename', function() { var deferred = Q.defer(); // 執行異步的操做 setTimeout(function() { deferred.resolve(); }, 1); return deferred.promise; });
對於這個例子,讓咱們先假定你有兩個 task,"one" 和 "two",而且你但願它們按照這個順序執行:api
在 "one" 中,你加入一個提示,來告知何時它會完成:能夠再完成時候返回一個 callback,或者返回一個 promise 或 stream,這樣系統會去等待它完成。數組
在 "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']);
監視文件,而且能夠在文件發生改動時候作一些事情。它總會返回一個 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