Transpile Async Attendent proposition avec Babel.js?
Il y a une proposition pour l'introduction de C# style async-await
. Je sais Babel.js transpiles ES6 à l'ES5, mais est-il un moyen de le rendre transpile async-vous attendent pour ES5
?
Vous devez vous connecter pour publier un commentaire.
Babel v6
De Babel v6, Babel ne contiennent pas de transformateurs de lui-même plus. Vous devez explicitement spécifier une fonctionnalité vous voulez transformer.
Presets - non ES2015 environnement
Le moyen le plus rapide pour obtenir ce travail est d'utiliser presets qui contiennent déjà de l'ensemble de plug-ins nécessaires à la transformation des ES2015 et récentes propositions. Pour
async
, vous aurez besoin de laes2015
etes2017
presets et lesexécution
plugin (n'oubliez pas d'installerbabel-runtime
comme décrit dans la documentation):Presets - ES2015 environnement
Si vous exécutez le code dans un environnement qui prend en charge ES2015 (plus précisément, des générateurs et des Promesses), alors tout ce que vous avez besoin est la es2017 préréglage:
Personnalisé
À transformer la
async
fonctions, vous aurez besoin de plugins.syntaxe-async-fonctions
est requis dans tous les cas, pour être en mesure d'analyser async fonctionsPour exécuter de la fonction async, vous devez soit utiliser
transformation-async-à-générateur
: Convertit leasync
fonction dans un générateur. Cela implique l'utilisation de Babel, une "co-routine" de la mise en œuvre.transformation-async-à-module-méthode
: Convertit aussi lesasync
fonction à un générateur, mais il transmet au module et la méthode spécifiée dans la configuration, au lieu de Babel propre méthode. Cela vous permet d'utiliser des bibliothèques externes tels quebluebird
.Si votre code s'exécute dans un environnement qui prend en charge les générateurs, alors il n'y a rien d'autre à faire. Toutefois, si l'environnement cible ne pas soutien des générateurs, vous aurez également à transformer le générateur. Cela se fait via le
transformation-régénérateur
transformer. Cette transformation dépend de l'exécution des fonctions, de sorte que vous aurez également besoin de Babel esttransformation-runtime
de transformation (+ lebabel-runtime
package).Exemples:
Asynchrone à générateur
Async du module méthode
Asynchrone à générateur + régénérateur
Babel v4 et plus
Oui, vous devez activer le expérimentale des transformateurs. Babel utilise régénérateur.
function*
. Comment m'en débarrasser? Est-il même possible d'utiliser cette méthode?import
etexport
déclarations ne sont pas pris en charge dans n'importe quel environnement. Vous devez également configurer Babel convertir CommonJS ou quel que soit le système de modules que vous ciblez.Cette solution peut avoir changé depuis (le 25 Février Felix Kling) ou peut-être il y a toujours plus d'une façon d'utiliser asynchrone attendent.
Ce qui a fonctionné pour nous, c'était de courir Babel comme
J'ai eu ce travail comme d'aujourd'hui, en faisant un supplément de
npm install babel-preset-stage-0
et de l'utiliser commeVoir
Peut-être même plus up-to-date maintenant; il suffit de mettre la babel des trucs dans un fichier séparé:
Voir mon code à how-can-i-utilisation-es2016-es7-async-attendre-dans-mon-acceptation-tests-pour-un-koa-js-app pour plus de détails.
Approuvé réponse semble être obsolète aujourd'hui. Le expérimentales drapeau a été dépréciée en faveur de l'étape.
http://babeljs.io/blog/2015/03/31/5.0.0/#experimental-option
Stade 0
Étape 1
La phase 2 (Phase 2 et ci-dessus sont activées par défaut)
babel.transform(code, { stage: 0 }).code
, puis je recevoir unReferenceError: [BABEL] unknown: Unknown option: base.stage
Comment les options doivent être définies?