2016-06-17 24 views
0

Das ist etwas, was gerade gestern passiert ist, und es bereitet mir große Kopfschmerzen.esprima.js/gulp-strip-debug interferiert mit gulp-jshint task durch das Melden nicht hilfreicher Fehler beim Entfernen von Debugger-Anweisungen

Im Rahmen meiner Build für arcade.ly Ich habe eine check-scripts Aufgabe, die Debugging-Code-Streifen und läuft jshint über alle meine 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')); 
}); 

Bis dies gestern funktionierte absolut in Ordnung und, wenn es ein Problem, ich würde einen hilfreichen jshint Fehler bekommen, der mir genau sagt, was falsch ist. Nun, wenn ich gulp check-scripts laufen, wenn es ein Problem gibt oft ich diese Art von Fehlern:

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) 

Wie Sie sehen können, gibt es keine nützlichen Informationen drin. Im Moment refaktoriere ich, so dass meine Changes oft eine Reihe von Dateien abdecken. Das Problem hier ist, ich kann sehen, esprima Parser ist unglücklich, aber ich habe keine Ahnung, welche Datei es bricht, noch welche Zeile des Codes in dieser Datei.

Ich kann es durch iteratives Kommentieren und Auskommentieren von Zeilen in check-scripts und rerunning gulp-checkscripts und schließlich durch Kommentieren und Auskommentieren von Code herausfinden, aber es ist offensichtlich ein wenig lästig.

In diesem Fall ist dies der Code, der den Fehler verursacht hat:

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

    ... 
} 

Wie Sie sehen können, gibt es ein fehlendes Komma, die den Fehler verursacht.

Das Problem scheint durch gulp-strip-debug verursacht werden, aber wenn ich diese einfach deaktivieren jshint wird wegen debugger Aussagen beklagen. Da ich bauen muss, um die Website sogar in Dev laufen zu lassen, ist dies ein Aufwand.

Ich glaube, ich gulp-strip-debug deaktivieren könnte und konfigurieren jshintdebugger Aussagen zu ignorieren, für Entwickler nur baut, aber ist es eine Möglichkeit, gulp-strip-debug zu konfigurieren, um Fehler zu melden besser, oder ist das ein Bug/Designfehler/Aufsicht?

Einsicht/Anregungen dankbar empfangen würde.

Danke,

Bart

Antwort

0

Die gulp-strip-debug Bibliothek ist eine sehr dünne Hülle um strip-debug so bin ich versucht zu schließen, dies ein Fehler ist (oder Mangel) in strip-debug, obwohl es auch in der sein könnte Weg gulp-strip-debug meldet Fehler von strip-debug.

Ich brauche ein wenig weiter zu untersuchen und möglicherweise in einer PR setzen. Es wäre sicherlich leicht genug, um es zu erhalten, um zu melden, in welcher Datei der Fehler ist, auch ohne die Zeilennummer, was an sich eine große Verbesserung wäre.