esprima.js/gulp-strip-debug 通过在剥离调试器语句时报告无用的错误来干扰 gulp-jshint 任务
esprima.js/gulp-strip-debug interfering with gulp-jshint task by reporting unhelpful errors when stripping debugger statements
这是昨天才开始发生的事情,让我很头疼。
作为我为 arcade.ly 构建的一部分,我有一个 check-scripts
任务去除调试代码和 运行s 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
语句而报错。因为即使在开发中我也需要构建到 运行 站点,这很麻烦。
我想我可以禁用 gulp-strip-debug
并配置 jshint 以忽略 debugger
语句,仅用于开发构建,但是有没有办法配置 gulp-strip-debug
更好地报告错误,或者这是 bug/design flaw/oversight?
任何 insight/suggestions 将不胜感激。
谢谢,
巴特
gulp-strip-debug
库是 strip-debug
的一个非常薄的包装器,所以我很想得出结论这是 strip-debug
中的一个错误(或缺陷),尽管它也可能是gulp-strip-debug
报告来自 strip-debug
的错误。
我需要进一步调查并可能提交 PR。让它报告错误在哪个文件中肯定很容易,即使没有行号,这本身就是一个很大的改进。
这是昨天才开始发生的事情,让我很头疼。
作为我为 arcade.ly 构建的一部分,我有一个 check-scripts
任务去除调试代码和 运行s 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
语句而报错。因为即使在开发中我也需要构建到 运行 站点,这很麻烦。
我想我可以禁用 gulp-strip-debug
并配置 jshint 以忽略 debugger
语句,仅用于开发构建,但是有没有办法配置 gulp-strip-debug
更好地报告错误,或者这是 bug/design flaw/oversight?
任何 insight/suggestions 将不胜感激。
谢谢,
巴特
gulp-strip-debug
库是 strip-debug
的一个非常薄的包装器,所以我很想得出结论这是 strip-debug
中的一个错误(或缺陷),尽管它也可能是gulp-strip-debug
报告来自 strip-debug
的错误。
我需要进一步调查并可能提交 PR。让它报告错误在哪个文件中肯定很容易,即使没有行号,这本身就是一个很大的改进。