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

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

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

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

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

Пример использования .babelrc поможет.

Спасибо

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Узел v8.x (ansible как ночная assembly) даже не нужен для него --harmony flag.

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

  • javascript – Почему существует спецификация для модhive синхронизации и асинхронности?
  • Экспорт узла узла из результата обещания