1

考虑以下 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 在外部调用时也能正常工作。任何想法可能是什么问题或缩小范围的步骤?

4

1 回答 1

1

尽管我不是 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 将正确地收到一个承诺(或类似的东西)并等待它完成。

谁能证实这个猜测?

于 2019-01-24T12:17:55.617 回答