Транспилировать асинхронно жду предложения с Бабелем.Джей?


есть предложение по введению стиля C#async-await. Я знаю Бабеля.Яш transpiles на ES6 в ES5, но есть ли способ, чтобы сделать это transpile асинхронно-ждут, чтобы ES5?

5 55

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