2015-08-17 8 views
21

Ich erhalte eine Fehlermeldung,Kann grunt-contrib-uglify "Let" -Schlüsselwörter nicht analysieren?

'Unexpected token: Name (bazz)'

wenn mein Grunzen Aufgabe uglify läuft. Das einzige, was mir in dieser Zeile aufgefallen ist, war, dass ich das Schlüsselwort "let" anstelle von "var" verwendete, also war ich mir nicht sicher, warum dieser Fehler ausgelöst wurde.

Ich habe eine else if-Anweisung mit lassen varName in jedem, das heißt:

function foo (bar) { 
    if (condition) { 
     let bazz = fn(); 
     //doSomething with bazz 
     _.assign(bar, bazz); 
    } else { 
     let bazz = fn2(); 
     //doSomething different with bazz 
     _.assign(bar, bazz); 
    } 
} 

ich es ändern könnte ein var bazz = {}; vor der, wenn else-Klausel, indem er, aber das wollte ich vermeiden, weil ich würde bazz zu Fn() und Fn2() unabhängig zuweisen.

Wollte wissen, ob jemand anderes in das geraten ist und was sie getan haben, um es zu beheben. Danke im Voraus!

+1

Ich stieß auf ein ähnliches Problem mit gulp-uglify. Es wurde der Fehler 'Unerwarteter Token-Name' i », erwarteter Punkt ';» 'ausgelöst, als in einer for-Schleife-Deklaration ein Schlüsselwort' let 'gefunden wurde. 'für (i = ca.Länge - 1; i> = 0; i -)'. Ändern von "Let" zu "Var" scheint das Problem zu lösen. – Aaaron

Antwort

15

Nachdem ich dieses Thema ein wenig mehr erforscht habe, habe ich herausgefunden, dass grunt-contrib-uglify und auch gulp-uglify UglifyJS als Abhängigkeit haben und ES6 "Harmony" noch nicht unterstützt. Folgen Sie https://github.com/mishoo/UglifyJS2/issues/448 für Updates.

Sie können auch Tools wie grunt-babel verwenden, um Ihren ES6-Code zu ES5 zu kompilieren.

0

Ich stieß auf der offiziellen gulp-uglify npm Seite auf die folgenden.

Notiere die Empfehlung:

Um ordnungsgemäß zu behandeln Bedingungen Fehler mit Node-Streams, das Projekt empfiehlt die Verwendung von pump. Weitere Informationen finden Sie unter Why Use Pump?.

Meine Implementierung des Beispiels auf der oben genannten Seite lautet:

gulpfile.js

var gulp = require('gulp'); 
var pump = require('pump'); 

// the npm page states: 
// can be a git checkout or another module 
// (such as `uglify-js-harmony` for ES6 support) 
var uglifyjs = require('uglify-js-harmony'); 
var minifier = require('gulp-uglify/minifier'); 

var concat = require('gulp-concat'); 

gulp.task('compress', function (cb) { 
    // the 'options' argument is included in the example, 
    // but i don't know what it does or how it can be removed 
    var options = { 
    preserveComments: 'license' 
    }; 

    pump([ 
     gulp.src('my_scripts/*.js'), // gets all js scripts in this folder 
     minifier(options, uglifyjs), 
     concat('my_bundled_script.js'), // concatenates all scripts into this file 
     gulp.dest('dist') // puts the file into this folder 
    ],cb 
); 
}); 

package.json

{ 
    "devDependencies": { 
    "gulp": "latest", 
    "pump": "latest", 
    "gulp-concat": "latest", 
    "gulp-uglify": "latest", 
    "uglify-js-harmony": "latest" 
    }, 
    "dependencies": {} 
} 

Ergebnisse

Ohne uglify-js-harmony mit:

  • pump war hilfreich bei der Suche, wo der Fehler kam (bei Verwendung von gulp-uglify)
  • eine Datei, die eine let Aussage hatte Fehler
  • verursacht

Bei der Verwendung von uglify-js-harmony, die Fehler traten nicht auf.

Weitere Überlegungen:

Die obige Seite zur Zeit zeigt:

// can be a git checkout or another module 
// (such as `uglify-js-harmony` for ES6 support) 
var uglifyjs = require('uglify-js'); 

Aber wenn uglify-js-harmony Installation habe ich die Warnmeldung:

npm WARN veraltet uglify-js-Harmonie @ 2.7.7: Abgelehnt zugunsten von uglify-es

Als ich versuchte, uglify-es statt uglify-js-harmony zu verwenden, jedoch bekam ich eine Fehlermeldung, ähnlich wie hier dokumentiert:

https://github.com/terinjokes/gulp-uglify/issues/287

Ich habe versucht, von dort das Problem Faden zu folgen, aber verirrten und konnte keine definitive Lösung finden, wie man uglify-es implementiert.

Verwandte Themen