吞咽 eslint 输出,如果文件太多



请考虑以下gulp文件:

var gulp = require('gulp');
var eslint = require('gulp-eslint');
var debug = require('gulp-debug');
gulp.task('lint', function (done) {
    gulp
        .src([
            'src/**/*.js',
            '!src/public/javascripts/external/*'
        ])
        .pipe(eslint())
        .pipe(eslint.format())
        //.pipe(debug({title: 'Linting:'}));
    done();
});

如果我的 src 文件夹包含太多文件(我不是在谈论过多的文件。小于 20),则gulp lint只会输出

Using gulpfile [my/path/to/gulpfile]
Starting 'lint'...
Finished 'lint' after 55ms

ESLint 不会有任何警告,即使我当然确保我的代码中存在问题。此问题可以通过从我的 src 文件夹中手动添加 javascript 文件而不使用通配符来重现。在一定数量的文件之后(我很遗憾地忘记计数),错误将不再显示。这不取决于我添加的文件,而取决于数量。

出于某种原因,可以通过添加输出调试信息的注释行来"修复"此行为,因此我假设我的错误与我误解了 gulp 在内部的工作方式有关。ESLint 在外部调用时也可以正常工作。任何想法可能是什么问题或缩小范围的步骤?

我能够解决我的问题,尽管我不是 100% 确定问题是什么。根据 gulp-eslint 包描述,您应该返回管道的结果。所以正确的gulpfile看起来像这样:

var gulp = require('gulp');
var eslint = require('gulp-eslint');
var debug = require('gulp-debug');
gulp.task('lint', function () {
    return gulp // note the return here
        .src([
            'src/**/*.js',
            '!src/public/javascripts/external/*'
        ])
        .pipe(eslint())
        .pipe(eslint.format());
    // no call to 'done()' is needed
});

我的猜测是该插件异步运行,我在实际完成之前通过调用done()结束了任务。打印调试信息要么发生在异步任务完成后,要么为完成提供了足够的时间。现在gulp将正确地收到一个承诺(或类似的东西),并等到它完成。

谁能证实这个猜测?

最新更新