【问题标题】:Stop gulp pipeline from executing when jshint fails当 jshint 失败时停止执行 gulp 管道
【发布时间】:2017-04-12 14:02:27
【问题描述】:

我正在使用 gulp 运行开发人员 Web 服务器,并且我希望在 javascript 文件发生更改时执行以下任务:

  • Lint javascript
  • 如果没有错误,将文件复制到 .tmp/
  • 重新加载网页

我在其他示例中看到使用如下代码所示的 jshint.reporter('fail') 来停止管道的其余部分。

var jshint   = require('gulp-jshint'),
    watch    = require('gulp-watch');

watch('resources/js/src/**/*.js', function() {
   util.log('Changes to js source files detected');
}).pipe(jshint())
.pipe(jshint.reporter('default'))
.pipe(jshint.reporter('fail'))
.pipe(gulp.dest('.tmp/js/src/'))
.pipe(connect.reload());

但是,当我这样做时,无论 lint 是否成功,它似乎总是停止。那么,如何在 linting 失败后结束管道?

【问题讨论】:

    标签: javascript gulp gulp-jshint


    【解决方案1】:

    不确定这是否是最佳解决方案,但它确实有效:

    var map = require('map-stream');
    ...
    
    var copyAndReload = map(function (file, cb) {
      if (file.jshint.success) {
        gulp.src('resources/js/src/**/*.js')
            .pipe(gulp.dest('.tmp/js/src/'))
            .pipe(connect.reload());
        }
     });
    
    watch('resources/js/src/**/*.js', function() {
      util.log('Changes to js source files detected');
    }).pipe(jshint())
    .pipe(jshint.reporter('default'))
    .pipe(copyAndReload);
    

    【讨论】:

      【解决方案2】:

      你可以做的是插件plumber在出错的情况下退出

      所以在起绒过程中用管道管道工

          .pipe(plumber(_doExit))
      

      这是您定义 _doExit 的方式

      function _doExit() {
          process.exit(1);
      }
      

      【讨论】:

      • 我不想这样做,因为我希望服务器继续运行。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-25
      • 1970-01-01
      • 2013-04-19
      • 1970-01-01
      • 2015-08-25
      相关资源
      最近更新 更多