1

Я использую параметр ES6 остальное в простейшим образом:ES6 параметр остальное не работает с Вавилонской

function func(a, ...b) { 
    for (var i = 0; i < b.length; i += 2) { 
    console.log(b[i], b[i + 1]); 
    } 
} 

Я установил babel-preset-es2015, и мой .babelrc файл просто имеет:

{ 
    "presets": ["es2015"] 
} 

Как ни странно, в результате чего выход:

"use strict"; 

function func(a) { 
    for (var i = 0; i < arguments.length; i += 2) { 
    console.log(arguments[i], arguments[i + 1]); 
    } 
} 

Я подал ошибку в https://phabricator.babeljs.io/T7000, но я очень обеспокоен, так как это второй раз, когда у меня действительно был базовый ES6, который неправильно перекосил с помощью Babel 6. Разве моя настройка нарушена? Является ли Babel 6 документированным где-то нестабильным/альфа? Или этот очень популярный модуль действительно так плох? Существуют ли какие-либо альтернативные трансиляторы ES6, написанные с использованием строгости компилятора и всеобъемлющих наборов тестов, которые можно было бы безопасно использовать?

+1

Похоже, что что-то может быть неправильно с вашей настройкой. Я запускал babel через ваш пример кода и получил [выход отличается от вашего] (https://gist.github.com/leoetlino/0edf49ae631951132069). У меня есть es2015 и stage-1 в качестве пресетов, но с 1-го этапа или без него не должно иметь значения. –

+0

Интересно. Я использую '6.3.13' (последний); вы используете последние? Или, может быть, «этап-1» необходим? – Jacob

+0

[email protected], [email protected], [email protected] Остальной модуль также является 6.3.13 ([email protected] согласно списку npm). –

ответ

1

Вот что я обнаружил.

Предустановка представляет собой набор плагинов для преобразования, все версии с ^. Похоже, что после того, как эти версии преобразований столкнулись, новая версия пресета не опубликована. Это не хороший источник для кураторского набора плагинов, которые, как известно, работают вместе. Так что в моем случае, несмотря на то, что у меня был последний babel-preset-es2015, и новой версии этого не было, это не значит, что у меня были все последние плагины.

Форсирование новых версий составных плагинов исправило проблему для меня. Предполагаемая версия говорит вам ничего полезного. Если у вас нет прямой зависимости от самих подключаемых модулей, единственный способ заставить их обновить - принудительно переустановить пресет.

+0

Вы используете npm v3 или v2? npm v3 кажется более надежным для обновления зависимостей. –

+0

NPM v3, но на самом деле это не так.Если что-то явно не дает версию зависимости, которая конфликтует с тем, что в настоящее время установлено, ни одна из версий NPM не обновит зависимость. – Jacob

1

Преобразование, которое вы ищете, является http://babeljs.io/docs/plugins/transform-object-rest-spread/, которое не является частью babel-preset-es2015, но является частью babel-preset-stage-2, или вы можете установить его самостоятельно.

+0

' babel-preset-es2015' включает 'transform-es2015-parameters ', что делает все остальное в параметрах. Оказалось, что для ошибки была поставлена ​​более старая версия 'transform-es2015-parameters'. – Jacob

1

У меня была такая же проблема с параметром останова ES6, как у Джейкоба. Я последовал совету yaycmyk и сделал npm install babel-preset-stage-2, а затем изменил свой файл с глотком от pipe(babel({ presets: ['es2015'] })) до pipe(babel({ presets: ['es2015', 'stage-2'] })) и на моем веселом пути я пошел.

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