esprima.js/gulp-strip-debug вмешивается в задачу gulp-jshint, сообщая о бесполезных ошибках при удалении операторов отладчика

Это то, что только что начало происходить вчера, и это вызывает у меня сильную головную боль.

Как часть моей сборки для https://arcade.ly/ меня есть check-scripts задача, которая убирает код отладки и запускает jshint для всего моего JavaScript:

gulp.task('check-scripts', function () {
    return gulp.src([
        'src/static/scripts/common/pinjector.js',
        'src/static/scripts/common/service.*.js',
        'src/static/scripts/asteroids-starcastle/*.js',
        'src/static/scripts/asteroids/asteroids.js',
        'src/static/scripts/asteroids/app.js',
        'src/static/scripts/starcastle/actor.*.js',
        'src/static/scripts/starcastle/service.*.js',
        'src/static/scripts/starcastle/starcastle.js',
        'src/static/scripts/starcastle/app.js',
        'src/static/scripts/space-invaders/actor.*.js',
        'src/static/scripts/space-invaders/service.*.js',
        'src/static/scripts/space-invaders/space-invaders.js',
        'src/static/scripts/space-invaders/app.js',
        'src/server/*.js',
    ])
    .pipe(stripDebug())
    .pipe(jshint({
        laxbreak: true,
        multistr: true
    }))
    .pipe(jshint.reporter('default'))
    .pipe(jshint.reporter('fail'));
});

До вчерашнего дня это работало абсолютно нормально, и, если бы возникла проблема, я бы jshint ошибка, говорящая мне точно, что не так. Теперь, когда я бегу gulp check-scripts, если есть проблема, я часто получаю такую ​​ошибку:

11:47:00] Starting 'check-scripts'...

events.js:154
      throw er; // Unhandled 'error' event
      ^
Error: Line 30: Unexpected identifier
    at constructError (/Library/WebServer/Documents/arcade/node_modules/esprima/esprima.js:2406:21)
    at createError (/Library/WebServer/Documents/arcade/node_modules/esprima/esprima.js:2425:17)
    at unexpectedTokenError (/Library/WebServer/Documents/arcade/node_modules/esprima/esprima.js:2499:13)
    at throwUnexpectedToken (/Library/WebServer/Documents/arcade/node_modules/esprima/esprima.js:2504:15)
    at expect (/Library/WebServer/Documents/arcade/node_modules/esprima/esprima.js:2522:13)
    at expectCommaSeparator (/Library/WebServer/Documents/arcade/node_modules/esprima/esprima.js:2546:13)
    at parseObjectInitializer (/Library/WebServer/Documents/arcade/node_modules/esprima/esprima.js:3052:17)
    at inheritCoverGrammar (/Library/WebServer/Documents/arcade/node_modules/esprima/esprima.js:2680:18)
    at parsePrimaryExpression (/Library/WebServer/Documents/arcade/node_modules/esprima/esprima.js:3246:20)
    at inheritCoverGrammar (/Library/WebServer/Documents/arcade/node_modules/esprima/esprima.js:2680:18)

Как видите, там нет никакой полезной информации. В настоящий момент я занимаюсь рефакторингом, поэтому мои наборы изменений часто охватывают несколько файлов. Проблема в том, что я вижу, что парсер esprima несчастен, но я понятия не имею, какой файл его нарушает, и какая строка кода в этом файле.

Я могу понять это, многократно комментируя и раскомментируя строки в check-scripts и перезапуск gulp-checkscripts и, в конечном итоге, комментируя и раскомментируя код, но это, очевидно, немного хлопотно.

В данном случае это код, вызвавший ошибку:

function masterSoundConfiguration() {
    var masterConfig = {
        elementCountForRapidRepeat: 6,
        sfxMasterVolume: 0.4,
        musicMasterVolume: 0.6,
        sounds: [],
        music: []                        // <-- Missing comma
        mergeIntoMaster: mergeIntoMaster
    };

    ...
}

Как видите, пропущена запятая, которая вызывает ошибку.

Проблема, кажется, вызвана gulp-strip-debug, но если я просто отключить этот jshint будет жаловаться из-за debugger заявления. Так как мне нужно собрать сайт для запуска даже в dev, это хлопотно.

Я полагаю, я мог бы отключить gulp-strip-debug и настроить Jshint, чтобы игнорировать debugger заявления, только для разработчиков, но есть ли способ настроить gulp-strip-debug лучше сообщать об ошибках, или это ошибка / недостаток дизайна / недосмотр?

Любое понимание / предложения будут с благодарностью приняты.

Спасибо,

Барт

1 ответ

Решение

gulp-strip-debug библиотека очень тонкая обертка вокруг strip-debug поэтому я испытываю желание заключить, что это ошибка (или недостаток) в strip-debug, хотя это также может быть в пути gulp-strip-debug сообщает об ошибках от strip-debug,

Мне нужно исследовать немного дальше и, возможно, поставить в пиар. Конечно, было бы достаточно легко заставить его сообщать, в каком файле находится ошибка, даже без номера строки, что само по себе было бы большим улучшением.

Другие вопросы по тегам