Это то, что только что началось вчера, и это вызывает у меня большую головную боль.esprima.js/gulp-strip-debug, мешающий заданию gulp-jshint, сообщая о бесполезных ошибках при снятии заявлений отладчика
В рамках моей сборки для 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
заявления, для DEV строит только, но есть способ настроить gulp-strip-debug
сообщать об ошибках лучше, или это ошибка/дизайн изъян/контроль?
Любое понимание/предложения были бы с благодарностью получены.
Спасибо,
Барт