2016-10-06 2 views
2

я получаю ошибку transpiling ES2017 JavaScript (в частности async/await функций) в ES5 с помощью накопительного пакета и Бабеля:Бабель ошибка/Rollup transpiling и пакетирование ES2017

Ошибки преобразующей \ SRC \ index.js с "Бабелем плагин: Опции {"modules": false} передано \ node_modules \ babel-preset-es2017 \ lib \ index.js, которое не принимает .

Мой .babelrc файл:

{ 
    "presets": [ 
    "es2017" 
    ], 
    "plugins": [ 
    "transform-runtime" 
    ], 
    "comments": false 
} 

Естественно, ошибка исчезнет, ​​если я изменю presets от es2017 к es2015 и закомментируйте async/await код.

Обратите внимание, что в то время как приложение использует ES2017 функции (т.е. async/await), он будет опубликован в виде пакета НПМ (как ES6 (ES2015) модуль), который позже transpiled к общей ES5 (ES2009).

Как пройти мимо этой ошибки и получить мой ES2017 счастливо перетаскивая в ES5?

+1

ES2017 не ES7. –

ответ

1

кажется, что фактическая конфигурация Предоставлена:

{ 
    "presets": [ 
    "es2017", {modules: false} 
    ], 
    "plugins": [ 
    "transform-runtime" 
    ], 
    "comments": false 
} 

Вы должны удалить {modules: false} вариант для babel-preset-es2017, который не принимает ни один, как он относится к babel-preset-es2015.

+0

Но как? Опция '{modules: false}' автоматически добавляется транспилером. –

0

Target es2015 в вашем .babelrc файле:

"presets": [ 
    "es2015" 
], 

и предобработка es2017 особенности сначала добавление Rollup Async functions plugin, который:

заменяет функцию асинхронной с функциями генератора, который может работать в современных браузерах или в большинстве версий узла.js во время комплектации

Добавить в свой проект:

npm install --save-dev rollup-plugin-async 

А затем вставьте async предобработки в массив rollup.config.js плагинов перед babel():

import async from 'rollup-plugin-async'; 

... 

plugins: [ 
     async(), 
     babel(babelrc()) 
], 

Ключом понимание было найдено в this Rollup Github issues thread, в котором @Victorystick подтверждает, что (как от 10 октября 2016 года):

Накопитель в настоящее время предназначен только для ES6, хотя, скорее всего, он получит удлинен до ES7 в ближайшее время.В настоящее время, если вы используете> функции ES6, они должны быть transpiled для Rollup обрабатывать их

Как асинхронном/Await, вероятно, будут стандартизированы в следующей версии ECMAScript, ES2017 (ака ES8) , вам понадобится дополнительный плагин для их обработки до запуска Babel.

Примечание:
YMMV, но позже я получил AsyncHelper not found run time Errors с помощью rollup-plugin-async на Windows 7, так что мое решение было (npm uninstall --save-dev rollup-plugin-async и) откатить использование async/await в пользу ES6 Promises на протяжении всей моей кодовую.

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