2015-08-17 7 views
21

Dostaję błąd,Czy grunt-contrib-uglify nie analizuje słów kluczowych "niech"?

'Nieoczekiwany token: nazwy (Bazz)'

gdy grunt moim zadaniem jest uruchomiony zeszpecić. Jedyne, co zauważyłem na tej linii, to że użyłem słowa kluczowego "let" zamiast "var", więc nie byłem pewien, dlaczego ten błąd został zgłoszony.

mam if else z niech varname w każdym poziomie:

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); 
    } 
} 

mogę zmienić go o var bazz = {}; przed if else klauzuli, ale chciałem uniknąć, bo musiałbym aby przypisać bazz do fn() i fn2() niezależnie.

Chciał (a) bym wiedzieć, czy ktokolwiek inny napotkał na tym i co zrobił, aby to naprawić. Z góry dziękuję!

+1

Napotkałem podobny problem z wulgaryzmem. Wystąpił błąd "Nieoczekiwana nazwa tokena" i ", oczekiwano punc«; ", gdy napotkał słowo kluczowe" let "w deklaracji pętli for. 'for (niech i = ca.length - 1; i> = 0; i -)'. Zmiana 'let' na' var' wydaje się rozwiązać problem. – Aaaron

Odpowiedz

15

Po zapoznaniu się z tym tematem dowiedziałem się, że grunt-contrib-uglify, a także ugrzędy-gulp mają UglifyJS jako zależność i nie wspierają jeszcze ES6 "Harmony". Śledź https://github.com/mishoo/UglifyJS2/issues/448 w poszukiwaniu aktualizacji.

Można również użyć narzędzi, takich jak grunt-babel, aby skompilować swój kod ES6 do ES5.

0

Natknąłem się na oficjalną stronę npm gulp-uglify.

Uwaga zalecenie:

Aby prawidłowo obsługiwać warunki błędach ze strumieni Węzeł ten projekt zaleca stosowanie pump. Aby uzyskać więcej informacji, zobacz Why Use Pump?.

Moja implementacja przykład na powyższej stronie jest:

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": {} 
} 

Wyniki

Bez użycia uglify-js-harmony:

  • pump był pomocny w zlokalizowaniu gdzie przyszedł błąd z (przy użyciu gulp-uglify)
  • plikiem, który miał let oświadczenie powodowało błędy

Podczas korzystania uglify-js-harmony, błędy nie wystąpiły.

Inne uwagi:

Powyższa strona aktualnie wyświetla:

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

Ale podczas instalacji uglify-js-harmony Dostałem komunikat ostrzegawczy:

KMP WARN przestarzałe zeszpecić-JS-harmonię @ 2.7.7: przestarzałe na rzecz uglify-es

Kiedy próbowałem użyć uglify-es zamiast uglify-js-harmony jednak mam komunikat o błędzie, podobny do tego, udokumentowany tutaj:

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

Starałem się śledzić wątek emisyjnej stamtąd ale zabłądził i nie może znaleźć ostatecznego rozwiązania, jak wdrożyć uglify-es.

Powiązane problemy