2016-10-06 9 views
2

Ich erhalte eine Fehlermeldung transpiling ES2017 JavaScript (insbesondere async/await Funktionen) in ES5 mit Rollup und Babel:Babel/Rollup Fehler transpiling und Bündelung ES2017

Fehlertransformations \ src \ index.js mit 'babel' plugin: Optionen {"modules": false} wurde an \ node_modules \ babel-preset-es2017 \ lib \ index.js übergeben, das keine Optionen akzeptiert.

Meine .babelrc Datei:

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

Natürlich geht der Fehler weg, wenn ich die presetses2017-es2015 und kommentieren Sie die async/await Code ändern.

Beachten Sie, dass, während die Anwendung ES2017 Funktionen (das heißt async/await) verwendet, es als NPM-Paket veröffentlicht (als ES6 (ES2015) Modul), dem generischen ES5 (ES2009) später transpiled wird.

Wie komme ich über diesen Fehler hinaus und bekomme meine ES2017 fröhlich zu ES5 tranepiling?

+1

ES2017 ist nicht ES7. –

Antwort

1

Es scheint, dass die aktuelle Konfiguration Sie vorgesehen ist:

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

Sie sollten die {modules: false} Option für babel-preset-es2017, die keine übernimmt entfernen, da es zu babel-preset-es2015 gilt.

+0

Aber wie? Die Option {modules: false} 'wird vom Transpiler automatisch eingefügt. –

0

Ziel es2015 in Ihrer .babelrc Datei:

"presets": [ 
    "es2015" 
], 

und Vorprozess die es2017, indem zuerst die Rollup Async functions plugin Zugabe, die:

Asynchron-Funktionen mit Generator-Funktionen ersetzt, die in modernen Browsern laufen können oder in den meisten Versionen von node.js während des Bündelns

zu einem Projekt hinzufügen:

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

Und dann async Vorverarbeitung zu Ihrem rollup.config.js Plugins Array einfügen, bevor babel():

import async from 'rollup-plugin-async'; 

... 

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

Der Schlüssel Einblick in this Rollup Github issues thread gefunden wurde, wobei @Victorystick dass bestätigt (wie vom 10. Oktober 2016):

Rollup derzeit nur Ziele ES6, obwohl es wahrscheinlich wird erweitert zu ES7 in Kürze.Wenn Sie jetzt verwenden> ES6 Funktionen, die sie benötigen, werden sein transpiled für Rollup sie zu verarbeiten

Als async/await sind wahrscheinlich in der nächsten Version von ECMAScript, ES2017 (aka ES8) standardisiert werden Sie benötigen ein zusätzliches Plugin, um sie zu verarbeiten, bevor Babel ausgeführt wird.

HINWEIS:
YMMV, aber ich erhielt später AsyncHelper not found run time Errors mit rollup-plugin-async auf Windows 7, so meine Lösung (npm uninstall --save-dev rollup-plugin-async und) war die Verwendung von async/await für ES6 Promises in meiner Code-Basis Rollback.