2014-08-30 16 views
3

我正在評估Gulp作爲Grunt的替代方法,並且存在以下問題。 通常,所有grunt插件(jshint,jscs,uglify等)都顯示任務中已處理文件的數量,但這似乎不是任何Gulp插件中的情況。 是否有特定的原因,以及如何能夠在Gulp中具有相同的功能。如何在Gulp中顯示處理文件的數量

只是作爲一個例子:

gulp.task('lint', function() { 
    return gulp.src('./js/*.*/*.js') 
     .pipe(jshint('.jshintrc')) 
     .pipe(jshint.reporter('default')) 
     .pipe(jshint.reporter('fail')) 
     .pipe(jscs('./.jscsrc')); 
}); 

只會顯示

[22:36:43] Finished 'lint' after 2.77 s 

,但我想看到的是已被處理的文件的數量,因爲它是由步兵

Running "jshint:all" (jshint) task 
>> 42 files lint free. 
Running "jscs:src" (jscs) task 
>> 42 files without code style errors. 
所示

謝謝!

回答

3

gulp插件沒有這樣做的原因是插件被設計爲不知道文件的數量。他們(幾乎總是)一次只看到一個文件,通過流傳入。

咕嚕工作的排序是這樣的(使用更少/ CSS一個簡單的例子):

  1. 所有減檔都在傳遞給少和處理,然後將其保存到新位置的CSS
  2. 一旦每個文件已經被處理了,所有的CSS文件都通過CSS運行
  3. 一旦每個文件都被分割了,所有的CSS文件都通過CSS優化器被壓縮,然後被保存回
  4. 完成。

每一步都要等待以前的狀態完全完成。

咕嘟咕嘟的作品更是這樣的:

  1. 開始裝貨少的文件。
  2. 只要文件被發現,但只要少做傳遞給少
  3. ,通過CSS棉短絨運行在內存中的CSS
    • 少現在將在下一個文件開始,如果有一個
  4. 只要棉短絨完成,貫穿優化的內存CSS
    • 如果不那麼做是
  5. 的棉短絨現在就下一個文件啓動
  6. 現在將文件寫出到目的地。
    • 優化器可以將棉短絨
  7. 重複2-5,直到所有的文件後的下一個文件開始已通過進程中運行。

步驟2-5都可以同時發生,每個都在不同的文件上。這就是說,有可能有一個插件可以跟蹤文件的數量,直到流結束並將其打印出來纔算數。 (這可能不會像gulp-watch創建的連續流一樣,因爲這些流不會結束。)

我沒有看到現有的插件會這樣做,但您可能可以在您的gulpfile中創建一個以類似的方式,以這種(未經測試):

// need to run: npm i --save-dev 'through' 
var through = require('through'); 

function count(message) { 
    var count = 0; 

    function countFiles(file) { 
    count++; 
    } 

    function endStream() { 
    console.log(count + ' ' + message || 'files processed.'); 
    this.emit('end'); 
    } 

    return through(countFiles, endStream); 
}; 

使用方法如下:

.pipe(jshint('.jshintrc')) 
.pipe(jshint.reporter('default')) 
.pipe(jshint.reporter('fail')) 
.pipe(count('files lint free.')) 
+0

這工作,但並不如預期... [請在這裏看到(https://stackoverflow.com/questions/27331941/how-do-i-count-the-number-of-files-in -a-吞流) – 2014-12-06 13:55:19

1

正如2015年5月,你可以的:

  • 使用一飲而盡計數計算文件的數量,或
  • 一飲而盡調試列出所有文件,並指望他們。

順便說一下,gulp-count只計數文件,但是gulp-debug計數並列出文件和文件夾。

-1

很簡單!

const glob = require('glob'); 
const search = './__tests__/*.js'; 
const files = glob.sync(search); 
console.log(files.length); 
相關問題