如何在Gulp中显示已处理文件的数量

时间:2014-08-30 20:41:04

标签: gulp

我正在评估Gulp作为Grunt的替代方案并遇到以下问题。 通常所有grunt插件(jshint,jscs,uglify等)都显示任务中已处理文件的数量,但在任何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

但我希望看到Grunt显示的已处理文件数

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

谢谢!

3 个答案:

答案 0 :(得分:3)

gulp插件不这样做的原因是插件被设计为不知道文件的数量。他们(几乎总是)一次只看到一个文件,通过流传入。

Grunt有点像这样(使用Less / CSS作为一个简单的例子):

  1. 将所有较少的文件传递给Less并进行处理,然后以CSS
  2. 的形式保存到新位置
  3. 每个文件都由Less处理后,所有CSS文件都通过CSS linter运行
  4. 每个文件都被linted后,所有CSS文件都会通过CSS优化器压缩然后保存回来
  5. 完成。
  6. 每个步骤都必须等待前一个状态完全完成。

    Gulp更像是这样:

    1. 开始加载较少的文件。
    2. 找到文件后,立即将其传递给Less
    3. Less完成后,通过CSS linter运行内存中的CSS
      • 如果有一个
      • ,现在将从下一个文件开始减少
    4. 一旦linter完成,就通过优化器运行内存中的CSS
      • 如果完成Less,则linter现在将在下一个文件上启动
    5. 现在将文件写入目的地。
      • 优化器可以在linter
      • 之后的下一个文件上启动
    6. 重复2-5,直到所有文件都在整个过程中运行。
    7. 步骤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.'))
      

答案 1 :(得分:1)

截至2015年5月,您可以:

  • 使用 gulp-count 来计算文件数,或
  • gulp-debug 列出所有文件并计算它们。

顺便说一句,gulp-count只计算文件,但gulp-debug计算并列出文件和文件夹。

答案 2 :(得分:-1)

这很简单!

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