Ошибка при использовании ES7 async / await с node, webpack и babel-loader

Я пытаюсь использовать синтаксис javascript ES7 на сервере, используя node.js с webpack и babel-loader (пресеты es2015 + stage-0). Я получил его для работы с babel-node, но когда я запускаю webpack, я получаю следующую ошибку в ключевом слове async (9:22 после ключевого слова async):

ERROR in ./src/server.js Module parse failed: C:\dev\node-async-sample\src\server.js 
Unexpected token (9:22) You may need an appropriate loader to handle this file type. 
SyntaxError: Unexpected token (9:22)

Я разместил код на github по адресу https://github.com/qubitron/node-async-sample, есть идеи, как заставить это работать?

Вот соответствующий фрагмент из src / server.js:

import express from 'express';
import http from 'request-promise';

let server = express();

server.get('/', async function(request, response) {
    let result = await http('http://www.google.com');
    response.send(result);
});

.babelrc:

{
  "presets": [
    "es2015",
    "node5",
    "stage-0"
  ],
  "plugins": [
    "transform-runtime"
  ]
}

и webpack.config.js:

module.exports = {
  entry: [
    'babel-polyfill',
    './src/server.js'
  ],
  output: {
    path: __dirname + '/dist',
    filename: 'server_bundle.js'
  },
  resolve: {
      extensions: ['', '.js', '.jsx']
  },
  module: {
    loaders: [
      {
        test: /\.jsx?$/,
        include: __dirname + '/src',
        loader: 'babel-loader'
      }
    ]
  }
};

Я видел здесь аналогичную проблему, но с другим сообщением об ошибке, и она была исправлена ​​в babel: master: Функции async await ES7 с неработающим загрузчиком babel


person Dan Taylor    schedule 28.06.2016    source источник


Ответы (1)


Ваш src-путь неверен. Никогда (например, никогда :)) соединять пути с помощью конкатенации строк - это path.join за это.

{
   test: /\.jsx?$/,
   include: path.join(__dirname, 'src'),
   loader: 'babel-loader'
}

Кстати, это устранит проблему с синтаксическим анализом, но вам все равно придется обрабатывать загрузку файла .json, добавив соответствующее расширение для раздела разрешения и используя json-loader

{ test: /\.json$/, loader: 'json-loader' }

Также вам нужно будет обработать предупреждение об отсутствии модулей. Например fs и net.

Поэтому я рекомендую вам использовать babel-cli для предварительной компиляции кода сервера.

babel src --out-dir dist
person Yury Tarabanko    schedule 28.06.2016