Почему перемещение объекта в массив приводит к сбою Gulp Uglify

У меня есть gulpfile, который должен нормально минимизировать мои js-файлы. У меня есть одна функция, которая запускает каждый цикл со следующей строкой:

newArr.push({[keyName]:val});

Эта конкретная строка приводит к сбою uglify.

Вся функция такова:

function convertArrToNestedObjArr(arr, keyName) {

    var newArr = [];
    if(arr) {

        $.each(arr, function(k, val) {

            newArr.push({[keyName]:val});
        })
    }
    return(newArr);
}

Процесс Gulp дает следующую ошибку:

stream.js:94 бросить; // Ошибка необработанного потока в канале. ^ Ошибка при новом JS_Parse_Error (eval при...


person Jaakko Karhu    schedule 10.02.2016    source источник
comment
Что такое [keyName]?   -  person Philipp    schedule 10.02.2016
comment
@Philipp: это в наполовину размеченном коде, это аргумент включающей функции. Эта нотация является нотацией вычисляемого имени свойства ES2015. Таким образом, OP должен использовать Node v4 или выше (или, если нет, это часть проблемы).   -  person T.J. Crowder    schedule 10.02.2016
comment
@ T.J.Crowder Извините за неясность. Это один из js-файлов, который мой процесс gulp пытается уменьшить/уменьшить. Но это приводит к сбою процесса gulp.   -  person Jaakko Karhu    schedule 10.02.2016
comment
@JaakkoKarhu: Ах! Что объясняет его.   -  person T.J. Crowder    schedule 10.02.2016


Ответы (1)


Вы сказали, что этот код находится в файле, предназначенном для отправки в браузер, который удаляется в процессе gulp.

В этой строке используется нотация вычисляемого имени свойства ES2015. Я подозреваю, что минификатор просто этого еще не понимает. Если это и так, то еще не так много браузерных движков JavaScript.

Если это проблема, транспилируйте перед удалением (возможно, с помощью Babel или Traceur) или замените

newArr.push({[keyName]:val});

с

var o = {};
o[keyName] = val;
newArr.push(o);
person T.J. Crowder    schedule 10.02.2016