如果 lint 因 Gulp 失败,是否 运行 执行任务?

Don't run tasks if lint fails with Gulp?

我有几个 Gulp 任务...

gulp.task('checkScssSyntax', function() {
    return gulp.src(scssFiles)
        .pipe(sassLint())
        .pipe(sassLint.format());
});

gulp.task('checkJavascriptSyntax', function() {
  var jsStream = gulp.src(jsFiles);
  return jsStream.pipe(jsHint())
    .pipe(jsHint.reporter('jshint-stylish'));
});

gulp.task('default', function() {
    runSequence(['checkJavascriptSyntax', 'checkScssSyntax'], function(error) {
      if (error) {
        console.log(error);
      } else {
        runSequence('compileJS', 'compileCSS', 'watch');
      }
    });
});

这似乎不起作用。 Gulp 只是 运行 第二个 runSequence,不管发生什么。

我希望 Gulp 仅 运行 第二个任务序列,前提是没有警告,并且在任何一个语法检查中都没有错误。除了 linters 打印到控制台的内容之外,我还想避免向控制台输出任何内容。

如何实现?

您的 checkScssSyntaxcheckJavascriptSyntax 任务不会发出错误事件,因此 run-sequence 不会注意到其中一个任务失败。 gulp-sass-lintgulp-jshint 默认情况下都不会发出错误事件,但会提供指示它们这样做的函数。

在你的 checkScssSyntax 任务中使用 sassLint.failOnError():

gulp.task('checkScssSyntax', function() {
    return gulp.src(scssFiles)
        .pipe(sassLint())
        .pipe(sassLint.format())
        .pipe(sassLint.failOnError());
});

在你的 checkJavascriptSyntax 任务中使用 jsHint.reporter('fail'):

gulp.task('checkJavascriptSyntax', function() {
  var jsStream = gulp.src(jsFiles);
  return jsStream.pipe(jsHint())
    .pipe(jsHint.reporter('jshint-stylish'))
    .pipe(jsHint.reporter('fail'));
});

I would also like to avoid outputting ANYTHING to the console other than what the linters print to the console

Gulp 有一个 CLI flag 让你禁止所有 gulp 记录:

gulp --silent