Использование 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
- знать , почему: