2014-08-30 2 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 не делают, это то, что плагины предназначены для того, чтобы не знать о количестве файлов. Они (почти всегда) видят только один файл за раз, проходя через потоки.

Grunt работает вроде этого (с помощью Less/CSS для простого примера):

  1. Все Менее Файлы передаются и меньше и обрабатываются, а затем сохраняется в новом месте, как CSS
  2. После каждый файл обрабатывается Менее, все файлы CSS выполняются через CSS linter
  3. После того, как каждый файл был литирован, все файлы CSS сжимаются с помощью оптимизатора CSS, а затем сохраняются обратно
  4. Выполнено.

Каждый шаг должен дождаться полного завершения предыдущего состояния.

Глоток работает больше, как это:

  1. начать загрузку Меньше файлов.
  2. Как только файл найден, передать его Less
  3. Как только будет сделано меньше, запустить CSS в памяти через CSS пуха
    • Less теперь начинается на следующий файл, если есть один
  4. Как только заканчивается ЛИНТЕР, запустить CSS в памяти через оптимизатор
    • ЛИНТЕР теперь начинается на следующий файл, если меньше делается
  5. Теперь напишите файл до места назначения.
    • оптимизатор может начать следующий файл после пуха
  6. Повторить 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-глотка-поток) –

1

по состоянию на май 2015 года, вы можете:

  • использование глоток подсчета подсчитать количество файлов, или
  • Глоток-отладка перечислить все файлы и сосчитать их.

Btw, gulp-count counts only Файлы, но счетчик gulp-debug и списки как файлов, так и папок.

-1

Это очень просто!

const glob = require('glob'); 
const search = './__tests__/*.js'; 
const files = glob.sync(search); 
console.log(files.length); 
Смежные вопросы