Транспилировать асинхронно жду предложения с Бабелем.Джей?
есть предложение по введению стиля C#async-await
. Я знаю Бабеля.Яш transpiles на ES6 в ES5, но есть ли способ, чтобы сделать это transpile асинхронно-ждут, чтобы ES5
?
5 ответов:
Babel v6
по состоянию на Babel v6, Babel больше не содержит никаких трансформаторов. Вы должны явно укажите любую функцию вы хотите преобразовать.
пресеты-не среда ES2015
самый быстрый способ получить эту работу-использовать шаблоны которые уже содержат набор плагинов, необходимых для преобразования ES2015 и новые предложения. Ибо
async
вам понадобитсяes2015
иes2017
пресеты иruntime
плагин (не забудьте установитьbabel-runtime
как описано в документации):{ "presets": [ "es2015", "es2017" ], "plugins": [ "transform-runtime" ] }
пресеты-среда ES2015
если вы запускаете код в среде, которая поддерживает ES2015 (более конкретно, генераторы и обещания), то все, что вам нужно, это предустановка es2017:
{ "presets": [ "es2017" ] }
Custom
только для преобразования
async
функции, вам понадобятся следующие подключаемый модуль.
syntax-async-functions
необходимо в любом случае, чтобы иметь возможность анализировать асинхронные функциичтобы выполнить асинхронная функция, вы либо должны использовать
transform-async-to-generator
: преобразует ).примеры:
асинхронный генератор
{ "plugins": [ "syntax-async-functions", "transform-async-to-generator" ] }
асинхронный метод модуля
{ "plugins": [ "syntax-async-functions", ["transform-async-to-module-method", { "module": "bluebird", "method": "coroutine" }] ] }
асинхронный генератор + регенератор
{ "plugins": [ "syntax-async-functions", "transform-async-to-generator", "transform-regenerator", "transform-runtime" ] }
Бабель v4 и старше
Да, вы должны включить экспериментальные трансформаторы. Вавилонское столпотворение использует регенератор.
использование
$ babel --experimental
babel.transform("code", { experimental: true });
это решение, возможно, изменилось с тех пор (25 февраля Феликс Клинг) или, возможно, есть еще несколько способов использования асинхронного ожидания.
то, что сработало для нас, было запустить Babel так
$ npm install babel-runtime
$ babel inputES7.js -o outputES5.js --optional runtime
Я получил эту работу на сегодняшний день, сделав дополнительный
npm install babel-preset-stage-0
и, используя его какvar babel = require("babel-core"); var transpiled = babel.transform(code, { "presets": ["stage-0"] });
посмотреть
возможно, даже более современный сейчас; просто поместите материал babel в отдельный файл:
'use strict'; require('babel/register'); // Imports babel - auto transpiles the other stuff require('./app'); // this is es6 - gets transpiled
см. мой код как-можно-и-использовать-es2016-es7-асинхронный-ждут-в-моей-прием-анализы-К-а-КоА-Яш-приложение для более подробной информации.
утвержденный ответ, похоже, устарел. Экспериментальный флаг был осужден в пользу стадии.
http://babeljs.io/blog/2015/03/31/5.0.0/#experimental-option
использование
$ babel --stage 0
babel.transform("code", { stage: 0 });
этап 0
- es7.classProperties
- es7.понимания
этап 1
- es7.asyncFunctions
- es7.декораторы
- es7.exportExtensions
- es7.objectRestSpread
Этап 2 (Этап 2 и выше включены по умолчанию)
- es7.exponentiationOperator