我正在评估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.
谢谢!
答案 0 :(得分:3)
gulp插件不这样做的原因是插件被设计为不知道文件的数量。他们(几乎总是)一次只看到一个文件,通过流传入。
Grunt有点像这样(使用Less / CSS作为一个简单的例子):
每个步骤都必须等待前一个状态完全完成。
Gulp更像是这样:
步骤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计算并列出文件和文件夹。
答案 2 :(得分:-1)
这很简单!
const glob = require('glob');
const search = './__tests__/*.js';
const files = glob.sync(search);
console.log(files.length);