Babel 6 async/wait: Неожиданный токен
У меня возникают проблемы с преобразованием async/await.
Что мне не хватает?
My.babelrc:
{
"presets": [ "es2015", "stage-0" ]
}
My package.json(snipped):
{
"babel-core": "^6.1.2",
"babel-plugin-transform-runtime": "^6.1.2",
"babel-preset-es2015": "^6.1.2",
"babel-preset-stage-0": "^6.1.2"
}
Вывод:
babel src/server
SyntaxError: src/server/index.js: Unexpected token (7:21)
5 |
6 | try {
> 7 | let server = await server('localhost', env.NODE_PORT || 3000)
| ^
8 | console.log(`Server started on ${server.info.uri}`)
9 | } catch (err) {
10 | console.error('Error starting server: ', err)
Ответы
Ответ 1
В соответствии с этим постом вам нужно иметь babel-polyfill
Babel 6 регенераторRuntime не определяется с помощью async/wait
Надеюсь, это поможет вам:)
EDIT:
Это не должно быть babel- polyfill, но это единственное, что я использовал.
Как сказал Готдо: ключевое слово await
должно находиться в области функций. Более того, это определение функции должно иметь ключевое слово async
.
Это означает, что вы не можете иметь ключевое слово await
в области верхнего уровня.
Ответ 2
Похоже, что async/await доступен только в babel-preset-stage-3
http://babeljs.io/docs/plugins/preset-stage-3/
Ответ 3
Вы можете скомпилировать их самостоятельно с помощью плагина transform-async-to-module-method
, это позволит вам скомпилировать их до со-подпрограмм bluebird, для которых требуются генераторы ES6 (доступные в узле4).
Или, если вам нужно скомпилировать его на ES5, чтобы он совместим с браузерами, вы можете использовать transform-async-to-generator
и facebook regenerator
.
Я написал о том, как настроить свою конфигурацию babel здесь http://madole.xyz/async-await-es7/
Ответ 4
Используйте Асинхронное преобразование генератора.
Установка
$ npm install babel-plugin-transform-async-to-generator
Использование
Добавьте в свой файл .babelrc
следующую строку:
{
"plugins": ["transform-async-to-generator"]
}