Использование acyns/ожидание в Node 6 с Babel

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

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

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

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

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

Спасибо

Ответ 1

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

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

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

Поскольку 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"
      }
    }]
  ]
}

Ответ 2

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

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

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

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

Для поддержки async/await, в частности:

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

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

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