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 は promise (またはそのようなもの) を適切に受け取り、それが完了するまで待機します。

誰でもこの推測を確認できますか?

于 2019-01-24T12:17:55.617 に答える