Использование async/await в Node 6 с Babel

Я пытаюсь настроить Babel для Node v6.9.2. Я хочу использовать async/await строит.

Поскольку я новичок в Babel и всей инфраструктуре Node, я не понял, как правильно его настроить:

  • Какой пресет я должен использовать? В Node уже реализованы большинство функций ES6. Поэтому я не хочу, чтобы Babel передавал функции, уже поддерживаемые Node 6.9.x (функции стрелок, новый механизм импорта и т. Д.) По соображениям производительности.

  • Какие плагины я должен включить, чтобы я мог использовать async / await? Там я тоже запутался, потому что после некоторых исследований я нашел несколько плагинов: syntax-async-functions, transform-async-to-generator и еще немного.

Пример .babelrc поможет.

Спасибо

2 ответа

Решение

Какой пресет я должен использовать?

Вам не нужно использовать какие-либо предустановки. Пресеты - это просто набор плагинов, которые облегчают использование, если вы хотите использовать набор функций (например, все ES2015 с preset-es2015). Но когда вы хотите передать только набор этих функций, вы включаете только соответствующие плагины.

Какие плагины я должен включить, чтобы я мог использовать async / await?

Поскольку Node 6 поддерживает генераторы, вы можете использовать transform-async-to-generator со следующим .babelrc:

{
  "plugins": ["transform-async-to-generator"]
}

И, конечно, вам нужно будет добавить плагины, если вам нужно передать больше неподдерживаемых функций.

альтернатива babel-preset-env

babel-preset-env автоматически определяет, какие плагины вам нужны для указанной среды. Это не будет включать любые плагины, которые не нужны. Чтобы указать текущую версию Node, вы должны использовать это .babelrc:

{
  "presets": [
    ["env", {
      "targets": {
        "node": "current"
      }
    }]
  ]
}

Короткий ответ

Используйте предустановку Babel для Node 6.x:

Длинный ответ

Чтобы узнать, какая функция ES поддерживается в данной версии Node, смотрите:

За async/await поддержку, в частности, см.:

Если вы используете Node v7.x (текущая версия), то вы можете использовать --harmony пометить и использовать async/await изначально без транспиляции.

Node v8.x (доступный как ночные сборки) даже не нуждается в --harmony флаг для этого.

Но обратите внимание, что Node не поддерживает import/export - чтобы знать, зачем видеть:

Другие вопросы по тегам