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 в области верхнего уровня.

Ответ 3

Вы можете скомпилировать их самостоятельно с помощью плагина transform-async-to-module-method, это позволит вам скомпилировать их до со-подпрограмм bluebird, для которых требуются генераторы ES6 (доступные в узле4).

Или, если вам нужно скомпилировать его на ES5, чтобы он совместим с браузерами, вы можете использовать transform-async-to-generator и facebook regenerator.

Я написал о том, как настроить свою конфигурацию babel здесь http://madole.xyz/async-await-es7/