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