2016-03-08 3 views
0

У меня есть процесс сборки с использованием gulp и babel, но babel бросает мне эти странные дубликаты имен функций во всем моем приложении.Бульварные дублированные имена функций

Ошибка в Chrome является: ReferenceError: changeScale is not defined

Исходный код:

changeScale = function(value) { 
    if (value >= 1000000) return value/1000000 + 'M'; 

    if (value >= 1000) return value/1000 + 'k'; 

    return value; 
}; 

код после глотком и столпотворение:

changeScale = function changeScale(value) { 
    if (value >= 1000000) return value/1000000 + 'M'; 

    if (value >= 1000) return value/1000 + 'k'; 

    return value; 
}; 

Обратите внимание на повторяющееся имя функции?

Мой глоток задача:

var gulp   = require('gulp'); 
var gutil  = require('gulp-util'); 
var bower  = require('bower'); 
var babel  = require("gulp-babel"); 
var concat  = require('gulp-concat'); 

gulp.task('js', function() { 
    gulp.src('./www/app/**/*.js') 
    .pipe(babel()) 
    .pipe(concat('app.js')).on('error', errorHandler) 
    .pipe(gulp.dest('./www/js/')); 
}); 

И мой .babelrc файл: { "presets": ["es2015"] }

+1

Они не странные, они ES6: все анонимные выражения функций, присваиваемые чему-то, получают имя. И нет, они не являются причиной вашей ошибки. Покажите нам, где вы пытаетесь вызвать эту функцию, и в какой строке вы получите это исключение. – Bergi

ответ

4

Вашего код назначение анонимной функции переменный называется changeScale, но без var ключевого слова вы создаете глобальный переменная. Вывод из Babel предположительно настроен на использование строгого режима ES5, который запрещает определять глобальные переменные без ключевого слова var, поэтому Chrome бросает ReferenceError, поскольку эта переменная никогда не была определена.

Вы можете исправить это, либо изменив код на var changeScale =, либо изменив его на использование объявления функции function changeScale() {}. Либо все будет хорошо работать, и вы можете прочитать о различиях here.

Как в стороне, дублирующиеся имена функций, которые вы видите здесь, не являются проблемой - вполне правильно назначить именованную функцию переменной, и она может облегчить отладку вашего кода, поскольку отладчики смогут чтобы показать вам это имя, а не просто перечислять его как анонимную функцию.

+0

Спасибо! Просто попав в es6, все еще noobie с ним – Mathius17

Смежные вопросы