在运行序列中使用gulp时任务未执行的问题

在运行序列中使用gulp时任务未执行的问题,gulp,gulp-watch,run-sequence,gulp-jscs,Gulp,Gulp Watch,Run Sequence,Gulp Jscs,我是gulp新手,所以我将一个简单的脚本放在一起,1)学习gulp的工作原理,2)改进我的开发工作流程 我遇到的问题是,如果我将runSequence任务列表设置为JSC的顺序,然后设置为lint,那么lint任务不会执行。但是,如果我反转它们,并首先运行lint,然后运行jsc,这两个任务都会成功执行。在做了更多的测试之后,我确信我使用JSC的方式导致了这个问题,或者JSC有一个问题阻止了它以这种方式执行 我检查过的东西: 依赖项已全局安装 依赖项已在my package.json中设置 我的

我是gulp新手,所以我将一个简单的脚本放在一起,1)学习gulp的工作原理,2)改进我的开发工作流程

我遇到的问题是,如果我将runSequence任务列表设置为JSC的顺序,然后设置为lint,那么lint任务不会执行。但是,如果我反转它们,并首先运行lint,然后运行jsc,这两个任务都会成功执行。在做了更多的测试之后,我确信我使用JSC的方式导致了这个问题,或者JSC有一个问题阻止了它以这种方式执行

我检查过的东西:
  • 依赖项已全局安装
  • 依赖项已在my package.json中设置
  • 我的gulpfile.js顶部所有需要的require语句都已建立
  • 检查我为jshint引用的.jshintrc文件是否确实存在
  • 检查我为jscs引用的.jscsrc文件是否确实存在
  • gulpfile.js: package.json: 正在监视的文件夹中的JavaScript文件。请注意我放置的错误,以便JSC和lint都报告问题: 运行序列任务顺序为
    'lint','jscs',function(){…}
    时的示例输出: 运行序列任务顺序为
    'jscs','lint',function(){…}
    时的示例输出(请注意,lint语句从未执行):
    在花了几个小时研究问题的原因后,我将问题缩小到这样一个事实,即JSCS在确定检查的代码不符合用户设置的规范时会抛出错误。抛出此错误时,将禁止执行运行序列中的后续任务;然而,奇怪的是,从未生成未经处理的错误事件来提醒用户该问题

    这与JSHINT的操作方式不同。当JSHINT确定代码中存在错误时,它只输出代码冲突,但不会抛出导致后续任务永远不会触发的错误

    我更新了脚本以解决此问题,方法是捕获未处理的错误,并对该错误执行最小数量的处理,以允许完成运行序列中指定的其余任务

    更新了
    gulpfile.js
    文件: 另外要注意的是: 我试图通过创建一个自定义JSCS reporter来解决这个问题。虽然我确实得到了一些功能,但它对我来说真的像是一个乱七八糟的东西,而不是一个固溶体。再加上JSC不像JSHINT那样提供定制报告,这让我更加难堪,因为我知道一旦我知道,我就必须重构代码

    /* File: gulpfile.js */
    
    /* grab the packages we will be using */
    var gulp = require('gulp');
    var gutil = require('gulp-util');
    var jscs = require('gulp-jscs');
    var jsHint = require('gulp-jshint');
    var jsHintStylish = require('jshint-stylish');
    var runSequence = require('run-sequence');
    var console = require('better-console');
    
    // configure the default task and add the watch task to it
    gulp.task('default', ['watch']);
    
    // configure the jscs task
    gulp.task('jscs', function() {
        return gulp.src('src/app/**/*.js')
            .pipe(jscs('.jscsrc'));
    });
    
    // configure the lint task
    gulp.task('lint', function() {
        return gulp.src("src/app/**/*.js")
            .pipe(jsHint('.jshintrc'))
            .pipe(jsHint.reporter(jsHintStylish));
    });
    
    // configure the watch task - set up which files to watch and what tasks to use when those files change
    gulp.task('watch',function() {
    
        // Clear console
        console.clear();
    
        // setup a watch against the files that need to be checked on save
        gulp.watch('src/app/**/*.js', function(){
            // Clear console so only current issues are shown
            console.clear();
    
            // Execute tasks to check code for issues
            runSequence('lint','jscs',function(){
                gutil.log("Code Check Complete.");
            });
        });
    
    });
    
    {
      "name": "my project name",
      "version": "0.1.0",
      "author": {
        "name": "my name",
        "email": "myemail@domain.com"
      },
      "devDependencies": {
        "better-console": "^0.2.4",
        "gulp": "^3.8.11",
        "gulp-jscs": "^1.6.0",
        "gulp-jshint": "^1.11.0",
        "gulp-util": "^3.0.4",
        "jshint-stylish": "^1.0.2",
        "run-sequence": "^1.1.0"
      }
    }
    
    (function() {
    
        'use strict;
    
        var x = ;
    
    })();
    
    [15:10:49] Starting 'lint'...
    
    c:\Users\anatha\My Projects\Tracks\Tracks.Client\src\app\app.js
      line 3  col 17  Unclosed string.
      line 4  col 1   Unclosed string.
      line 5  col 14  Unclosed string.
      line 6  col 1   Unclosed string.
      line 7  col 6   Unclosed string.
      line 8  col 1   Unclosed string.
      line 3  col 5   Unclosed string.
      line 1  col 13  Missing semicolon.
      line 8  col 1   Missing "use strict" statement.
      line 1  col 13  Unmatched '{'.
      line 1  col 1   Unmatched '('.
      line 8  col 1   Expected an assignment or function call and instead saw an expression.
      line 8  col 1   Missing semicolon.
    
      ×  4 errors
      ‼  9 warnings
    
    [15:10:49] Finished 'lint' after 104 ms
    [15:10:49] Starting 'jscs'...
    [15:10:49] 'jscs' errored after 157 ms
    [15:10:49] Error in plugin 'gulp-jscs'
    Message:
        Unexpected token ILLEGAL at app.js :
         1 |(function() {
         2 |
         3 | 'use strict;
    -----------------------^
         4 |
         5 | var x = ;
    [15:10:49] Code Check Complete.
    
    [15:09:48] Starting 'jscs'...
    [15:09:48] 'jscs' errored after 178 ms
    [15:09:48] Error in plugin 'gulp-jscs'
    Message:
        Unexpected token ILLEGAL at app.js :
         1 |(function() {
         2 |
         3 | 'use strict;
    -----------------------^
         4 |
         5 | var x = ;
    [15:09:48] Code Check Complete.
    
    /* File: gulpfile.js */
    
    /* grab the packages we will be using */
    var gulp = require('gulp');
    var gUtil = require('gulp-util');
    var jscs = require('gulp-jscs');
    var jsHint = require('gulp-jshint');
    var jsHintStylish = require('jshint-stylish');
    var runSequence = require('run-sequence');
    var console = require('better-console');
    
    // default error handler
    var handleJscsError = function(err) {
        console.log("Error: " + err.toString());
        this.emit('end');
    }
    
    // configure the default task and add the watch task to it
    gulp.task('default', ['watch']);
    
    // configure the jscs task
    gulp.task('jscs', function() {
        return gulp.src('src/app/**/*.js')
            .pipe(jscs('.jscsrc'))
            .on('error',handleJscsError);
    });
    
    // configure the lint task
    gulp.task('lint', function() {
        return gulp.src("src/app/**/*.js")
            .pipe(jsHint('.jshintrc'))
            .pipe(jsHint.reporter(jsHintStylish));
    });
    
    // configure the watch task - set up which files to watch and what tasks to use when those files change
    gulp.task('watch', function() {
    
        // Clear console
        console.clear();
    
        // setup a watch against the files that need to be checked on save
        return gulp.watch('src/app/**/*.js', function(){
    
            // Clear console so only current issues are shown
            console.clear();
    
            // Execute tasks to check code for issues
            runSequence('jscs','lint',function(){
                console.log("Tasks Completed.")
            });
    
        });
    
    });